add_executable 是唯一入口,目标名必须全局唯一,否则 cmake 报错;cmakelists.txt 必须包含 project() 和 c 标准设置;源文件路径需相对正确;可执行文件默认输出到 cmake-build-debug/ 下。

add_executable 是唯一入口,名字不能重复
CLion 本身不生成可执行文件,它靠 CMake 解析 CMakeLists.txt 中的 add_executable 指令来决定构建什么。每调用一次 add_executable,就定义一个独立可执行目标,且目标名必须在整个项目中唯一——否则 CMake 配置失败,CLion 会报错 CMake Error: add_executable cannot create target "xxx" because another target with the same name already exists。
常见错误是复制粘贴时没改名,比如写了两次 add_executable(main main.c);或者手动添加后忘了删掉 CLion 自动生成的那一行。
- 目标名(第一个参数)建议与主源文件名一致,但不是强制要求
- 第二个及后续参数是参与编译的源文件路径,相对
CMakeLists.txt所在目录 - 路径支持通配符,如
add_executable(app *.c),但不推荐用于多文件项目(易漏、难维护)
CMakeLists.txt 必须声明 project() 和 C 标准
没有 project() 声明,CMake 会拒绝运行;没有 set(CMAKE_C_STANDARD ...),编译器可能用默认老标准(如 C90),导致 for (int i = 0; ...) 这类写法报错。
典型最小可用结构如下:
cmake_minimum_required(VERSION 3.24) project(hello C) set(CMAKE_C_STANDARD 11) add_executable(hello main.c)
注意:project(hello C) 中的 C 表示只启用 C 编译器(不加载 C++ 头或链接 C++ runtime),如果混用 C++ 文件,得改成 project(hello C CXX) 或直接去掉语言列表让 CMake 自动推导。
源文件不在根目录?路径要写对
CLion 不自动递归扫描子目录,add_executable(app src/main.c src/utils.c) 这种写法必须确保 src/main.c 真实存在,且路径相对于 CMakeLists.txt 所在位置。
容易踩的坑:
- 误写成
add_executable(app ./src/main.c)——./是冗余的,CMake 路径解析不认这个前缀 - 把文件拖进 CLion 项目视图却没更新
CMakeLists.txt—— CLion 不会自动把新文件加进构建目标,必须手动补到add_executable参数里 - 用
file(GLOB ...)自动收集,比如file(GLOB SOURCES "src/*.c"),但要注意:文件增删后,CMake 缓存不会自动感知,需手动 Reload CMake Project(右键CMakeLists.txt→ “Reload CMake Project”)
生成的 exe 在哪?别直接找 cmake-build-debug
可执行文件默认输出到 cmake-build-debug/(Debug 模式)或 cmake-build-release/(Release 模式)下,但具体路径受 CMake 配置影响。最稳妥的方式是看 CLion 底部 CMake 工具窗口里的日志,搜索 Output: 后面的路径。
如果你改过 CMAKE_RUNTIME_OUTPUT_DIRECTORY,比如加了这行:
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
那最终 exe 就在 cmake-build-debug/bin/ 下,而不是默认的根目录。
另外:Windows 下生成的是 .exe,Linux/macOS 是无后缀可执行文件,别凭后缀判断是否成功。











