started changes
This commit is contained in:
68
.opencode/cmake-plan.md
Normal file
68
.opencode/cmake-plan.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# 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