gitignore update
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -8,6 +8,7 @@ Thumbs.db
|
|||||||
*.swp
|
*.swp
|
||||||
*.swo
|
*.swo
|
||||||
.claude/**
|
.claude/**
|
||||||
|
.opencode/**
|
||||||
# Build system metadata (keep actual build dirs tracked)
|
# Build system metadata (keep actual build dirs tracked)
|
||||||
CMakeFiles/**
|
CMakeFiles/**
|
||||||
CMakeCache.txt
|
CMakeCache.txt
|
||||||
|
|||||||
@@ -1,90 +0,0 @@
|
|||||||
# Project Agent Guidelines
|
|
||||||
|
|
||||||
## Build, Lint, and Test Commands
|
|
||||||
|
|
||||||
### Build Commands
|
|
||||||
```bash
|
|
||||||
# Create build directory and configure
|
|
||||||
mkdir -p build && cd build && cmake ..
|
|
||||||
|
|
||||||
# Build all targets
|
|
||||||
make
|
|
||||||
|
|
||||||
# Build specific target
|
|
||||||
make <target_name>
|
|
||||||
|
|
||||||
# Build with specific configuration
|
|
||||||
make Release
|
|
||||||
```
|
|
||||||
|
|
||||||
### Lint Commands
|
|
||||||
```bash
|
|
||||||
# C++ linting with clang-tidy (if available)
|
|
||||||
clang-tidy src/*.cpp -- -std=c++23 -I include/
|
|
||||||
|
|
||||||
# C++ formatting with clang-format
|
|
||||||
clang-format -i src/*.cpp include/*.h
|
|
||||||
```
|
|
||||||
|
|
||||||
### Test Commands
|
|
||||||
```bash
|
|
||||||
# Run all tests (if any exist)
|
|
||||||
make test
|
|
||||||
|
|
||||||
# Run a single test (if using a testing framework like Google Test)
|
|
||||||
./build/<test_name>
|
|
||||||
|
|
||||||
# For CMake-based projects with tests
|
|
||||||
ctest -R <test_regex>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Code Style Guidelines
|
|
||||||
|
|
||||||
### General
|
|
||||||
- Use C++23 standard features
|
|
||||||
- Follow Google C++ Style Guide principles
|
|
||||||
- Keep functions small and focused
|
|
||||||
- Use meaningful, descriptive names
|
|
||||||
- Write clear, self-documenting code
|
|
||||||
- Add comments for complex logic
|
|
||||||
|
|
||||||
### Naming Conventions
|
|
||||||
- Classes: PascalCase (e.g., `MyClass`)
|
|
||||||
- Functions: camelCase (e.g., `calculateSum`)
|
|
||||||
- Variables: camelCase (e.g., `myVariable`)
|
|
||||||
- Constants: UPPER_SNAKE_CASE (e.g., `MAX_SIZE`)
|
|
||||||
- Files: snake_case (e.g., `my_file.cpp`)
|
|
||||||
|
|
||||||
### Imports and Includes
|
|
||||||
- Use angle brackets for system headers: `#include <iostream>`
|
|
||||||
- Use quotes for local headers: `#include "my_header.h"`
|
|
||||||
- Order includes: system headers, then local headers
|
|
||||||
- Avoid `using namespace` in headers
|
|
||||||
- Use forward declarations when possible
|
|
||||||
|
|
||||||
### Formatting
|
|
||||||
- Use 2-space indentation (no tabs)
|
|
||||||
- No trailing whitespace
|
|
||||||
- Single space around operators
|
|
||||||
- Function parameters on same line if short, otherwise one parameter per line
|
|
||||||
- Braces on same line for functions, new line for control structures
|
|
||||||
|
|
||||||
### Types
|
|
||||||
- Use `auto` when type is obvious from initialization
|
|
||||||
- Prefer `const` and `constexpr` for immutable values
|
|
||||||
- Use smart pointers (`std::unique_ptr`, `std::shared_ptr`) instead of raw pointers
|
|
||||||
- Use `std::optional` for optional values
|
|
||||||
- Use `std::string_view` for string views
|
|
||||||
|
|
||||||
### Error Handling
|
|
||||||
- Use exceptions for error conditions
|
|
||||||
- Prefer RAII for resource management
|
|
||||||
- Use `std::optional` or `std::expected` for operations that can fail
|
|
||||||
- Don't ignore return values of functions that can fail
|
|
||||||
|
|
||||||
### Code Structure
|
|
||||||
- Keep lines under 100 characters
|
|
||||||
- Separate logical sections with blank lines
|
|
||||||
- Group related functions together
|
|
||||||
- Use namespaces to avoid naming conflicts
|
|
||||||
- Break large functions into smaller, reusable components
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
# CMake 2026 Project Setup Plan
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
This document outlines the technical plan for setting up a CMake-based C++ project with the following requirements:
|
|
||||||
- clang++ compiler with C++23 defaults
|
|
||||||
- Automatic source file discovery in src/ directory
|
|
||||||
- Executable generation from files containing 'main' in filename
|
|
||||||
- External dependency handling for git submodules
|
|
||||||
- Organized compile flags and variables
|
|
||||||
|
|
||||||
## Key Components
|
|
||||||
|
|
||||||
### 1. Compiler Configuration
|
|
||||||
- Use clang++ as the C++ compiler
|
|
||||||
- Set C++ standard to C++23
|
|
||||||
- Configure appropriate compiler flags for clang
|
|
||||||
|
|
||||||
### 2. Source File Discovery
|
|
||||||
- Scan src/ directory for all .cpp files
|
|
||||||
- Use regex pattern `.*main.*\.cpp$` to identify main files
|
|
||||||
- Separate main files from other source files
|
|
||||||
|
|
||||||
### 3. Executable Generation
|
|
||||||
- Automatically create executables from files with 'main' in filename
|
|
||||||
- Create a library from all non-main source files
|
|
||||||
- Link the library to each executable
|
|
||||||
|
|
||||||
### 4. External Dependency Management
|
|
||||||
- Handle dependencies in external/ directory
|
|
||||||
- Example: spdlog in external/spdlog with namespace spdlog
|
|
||||||
- Create interface libraries for external dependencies
|
|
||||||
|
|
||||||
### 5. Compile Flags Organization
|
|
||||||
- Debug build flags: -g -O0 -Wall -Wextra
|
|
||||||
- Release build flags: -O3 -DNDEBUG -Wall -Wextra
|
|
||||||
- Common flags: -std=c++23 -fPIC
|
|
||||||
|
|
||||||
## Implementation Details
|
|
||||||
|
|
||||||
### Regex Pattern
|
|
||||||
```
|
|
||||||
.*main.*\.cpp$
|
|
||||||
```
|
|
||||||
Used to detect files containing 'main' in their filename.
|
|
||||||
|
|
||||||
### Directory Structure
|
|
||||||
- `src/` - Source files directory
|
|
||||||
- `external/` - Git submodules directory
|
|
||||||
- `include/` - Header files directory
|
|
||||||
|
|
||||||
### File Processing Logic
|
|
||||||
1. Find all .cpp files in src/
|
|
||||||
2. Separate main files from other source files
|
|
||||||
3. Create library from non-main files
|
|
||||||
4. Generate executables from main files
|
|
||||||
5. Link library and external dependencies to each executable
|
|
||||||
|
|
||||||
## CMake Commands Used
|
|
||||||
- `cmake_minimum_required(VERSION 3.15)`
|
|
||||||
- `project(ProjectEuler CXX)`
|
|
||||||
- `file(GLOB_RECURSE)`
|
|
||||||
- `list(APPEND)`
|
|
||||||
- `add_executable()`
|
|
||||||
- `add_library()`
|
|
||||||
- `target_link_libraries()`
|
|
||||||
- `target_compile_features()`
|
|
||||||
- `find_package()`
|
|
||||||
- `add_subdirectory()`
|
|
||||||
Reference in New Issue
Block a user