如何在CMakeLists中用CMake查找exe文件?编译器配置疑问
CMake相关问题解答
一、在CMakeLists中查找.exe文件的方法
CMake提供find_program()命令专门用于查找可执行文件,这是最规范的实现方式,基本用法如下:
# 定义变量存储找到的可执行文件路径,指定目标文件名,可附加搜索路径提示 find_program(TARGET_EXEC_PATH NAMES target.exe # 要查找的.exe文件名 PATHS "custom/search/path" # 可选,指定优先搜索的路径 DOC "Description of the target executable" # 可选,用于CMake GUI的说明文本 ) # 检查查找结果 if(TARGET_EXEC_PATH) message(STATUS "Found target.exe at: ${TARGET_EXEC_PATH}") else() message(FATAL_ERROR "Failed to locate target.exe") endif()
如果查找的是系统常用工具(比如cl.exe),可以省略PATHS参数,CMake会自动在系统路径、环境变量包含的目录中搜索。
二、关于CMAKE_CXX_COMPILER的错误处理逻辑
你给出的代码存在语法和逻辑错误,CMake的语句格式、判断方式都不符合规范,修正后的可行逻辑如下:
首先,初始配置的正确写法(引用环境变量需用$ENV{VAR_NAME},且语句需闭合):
set(CMAKE_CXX_COMPILER "$ENV{myCompilersEnvVariableName}")
处理编译器未配置成功的情况,需判断CMAKE_CXX_COMPILER是否为空或对应文件不存在,示例代码:
# 从环境变量获取编译器路径 set(CMAKE_CXX_COMPILER "$ENV{myCompilersEnvVariableName}") # 判断编译器是否无效 if(NOT CMAKE_CXX_COMPILER OR NOT EXISTS "${CMAKE_CXX_COMPILER}") # 搜索cl.exe find_program(CL_EXEC_PATH NAMES cl.exe) if(CL_EXEC_PATH) set(CMAKE_CXX_COMPILER "${CL_EXEC_PATH}") message(STATUS "Fallback to cl.exe at: ${CL_EXEC_PATH}") else() message(FATAL_ERROR "No valid CXX compiler found: neither env var nor cl.exe exists") endif() endif()
注意:设置CMAKE_CXX_COMPILER的代码必须放在project()命令之前,因为project()会自动检测并初始化编译器,之后再修改将不会生效。
内容的提问来源于stack exchange,提问作者John Hunter
相关产品推荐
相关产品推荐

