CMakeLists构建提示成功但未生成目标可执行文件exeName咨询
解决CMake生成可执行文件后找不到的问题
这种情况我碰到过好几次,大概率是可执行文件的输出路径没找对,而不是CMake脚本本身有问题。下面给你一步步排查的方法:
1. 先确认你的构建目录
CMake推荐用「out-of-source构建」(单独建一个build文件夹存放编译产物),如果你是这么操作的:
- 在源码目录下创建
build文件夹,执行cd build,再运行cmake ..和make - 那可执行文件
exeName应该就在build目录根目录下(没额外设置输出路径的话)
要是你直接在源码目录执行cmake .和make(不推荐的in-source构建),exe会直接出现在源码目录里,但这种方式会把编译文件混在源码中,建议以后改用out-of-source构建。
2. 检查CMakeLists.txt里的输出路径配置
看看脚本里有没有设置过以下变量,它们会改变可执行文件的输出位置:
CMAKE_RUNTIME_OUTPUT_DIRECTORY:全局设置所有可执行文件的输出目录EXECUTABLE_OUTPUT_PATH:针对单个可执行目标的输出路径
比如如果有这样的代码:
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
那exe会被放到build/bin目录下;如果是:
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/output)
那exe会出现在源码目录的output文件夹里。
3. 从make的输出里找路径
重新执行一次make,仔细看终端的输出内容,尤其是最后几行的链接步骤。比如你会看到类似这样的行:
Linking C executable exeName
或者如果有指定路径的话会显示:
Linking C executable bin/exeName
这里的路径就是可执行文件的准确位置。
4. 检查是否需要执行安装步骤
如果你的CMakeLists.txt里写了install相关命令,比如:
install(TARGETS exeName DESTINATION bin)
那默认情况下make只会把exe生成在构建目录里,你需要额外执行make install才能把它复制到安装路径(默认是/usr/local/bin,或者你cmake时通过-DCMAKE_INSTALL_PREFIX指定了其他路径)。
另外,给你一个包含.c和.asm文件的标准CMakeLists.txt示例参考:
cmake_minimum_required(VERSION 3.10) project(MyExeProject) # 启用汇编语言支持,确保CMake能处理.asm文件 enable_language(ASM) # 添加可执行目标,列出所有要编译的.c和.asm文件 add_executable(exeName main.c utils.c core.asm helper.asm ) # 可选:设置输出到源码目录的bin文件夹,方便查找 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
内容的提问来源于stack exchange,提问作者Kennedy
相关产品推荐
相关产品推荐

