main.cpp自动生成并关联构建目标,无需额外操作即可编辑运行;若run按钮灰色,需检查toolchains中编译器是否配置成功,且确保cmakelists.txt中add_executable包含main.cpp。

main.cpp 里直接写代码是最简路径
CLion 新建 C++ Executable 项目后,main.cpp 已自动生成并关联到构建目标。只要编译器链配置完成(如 MinGW 或 MSVC),你无需额外操作就能直接编辑、运行它。
常见错误现象:Run 按钮灰色、点击无反应 —— 这不是代码没加进去,而是工具链未选或 CMake 配置失败。先去 File → Settings → Build, Execution, Deployment → Toolchains 确认编译器已识别。
注意点:
-
main.cpp必须在add_executable(...)的参数列表中被 CMake 显式包含,初始模板已做到这点,别手动删掉 - 如果重命名了
main.cpp,必须同步修改CMakeLists.txt中的add_executable行,否则编译报错:target 'xxx' has no source files - 中文路径会导致 CMake 解析失败,项目路径和文件名都建议用纯英文
添加新源文件(.cpp/.h)要让 CMake 知道
CLion 不会自动把新建的 .cpp 文件加入构建——它只是文件系统操作,CMake 才管“哪些文件参与编译”。漏掉这步,代码写了也进不了可执行文件。
正确做法是两步缺一不可:
- 右键项目根目录或
src/目录 →New → C/C++ Source File(输入名字,选.cpp或.h) - 打开
CMakeLists.txt,找到add_executable(...)这一行,在括号内追加新文件名,例如:add_executable(MyApp main.cpp utils.cpp)
如果你用 file(GLOB ...) 自动收集源码(比如 file(GLOB SOURCES "*.cpp")),那新增文件会被自动捕获——但要注意:GLOB 是生成时扫描,不是实时监听;改完文件名或增删文件后需手动触发 Reload CMake Project(右键 CMakeLists.txt → Reload project)。
头文件(.h)不参与编译,但包含路径必须对
.h 文件本身不会被编译,但 #include "xxx.h" 能否成功,取决于 CLion 是否能把该头文件所在目录告诉编译器。
默认情况下,CMake 只把项目根目录设为 include 路径。如果你把头文件放在 include/ 子目录下,就得显式声明:
- 在
CMakeLists.txt中添加:target_include_directories(MyApp PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) -
MyApp是你在add_executable中定义的目标名,必须一致 -
PRIVATE表示只对当前目标生效;若其他目标也要用这些头文件,改用PUBLIC
常见错误:fatal error: xxx.h: No such file or directory,90% 是因为没加 target_include_directories 或路径写错(比如漏了 ${CMAKE_CURRENT_SOURCE_DIR} 前缀)。
添加第三方源码(如 sqlite3.c)要同时处理依赖和路径
像 sqlite3.c 这类单文件库,不能只丢进项目就完事。它通常带 sqlite3.h,且内部有 #include 引用,所以必须一起管理。
关键动作只有三个:
- 把
sqlite3.c和sqlite3.h放进项目目录(如lib/sqlite3/) - 在
CMakeLists.txt的add_executable中加入lib/sqlite3/sqlite3.c - 加一句:
target_include_directories(MyApp PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/lib/sqlite3)
漏掉第三步,sqlite3.c 自身编译就会失败,报一堆 undefined reference 或 no such file。另外,不要用绝对路径(如 D:/xxx/sqlite3.c),CMake 无法跨机器迁移。
最易被忽略的一点:CMake 配置不是一次性的。每次手动改了 CMakeLists.txt,CLion 不会自动重载——你得右键它,点 Reload project,或者等右下角弹出 “Reload required” 提示再点。否则所有改动都只是文本,不会影响构建行为。











