更换工具链编译CommonApi时CMake报错:源目录不存在
以下是针对问题的具体调试步骤:
检查CMake版本兼容性
运行cmake --version对比成功/失败工具链对应的CMake版本。-B参数是CMake 3.13版本才引入的特性,如果失败环境中的CMake版本低于3.13,会直接忽略该参数,导致构建文件生成在当前目录。清理项目根目录的残留构建文件
换工具链前未清理的CMake缓存会干扰新构建,执行以下命令清除残留:rm -rf CMakeCache.txt CMakeFiles Makefile之后重新运行完整的CMake配置和构建命令。
检查工具链文件的强制设置
查看你使用的新工具链文件(.cmake),确认其中是否存在覆盖构建目录的配置,比如:set(CMAKE_BINARY_DIR "${CMAKE_SOURCE_DIR}/build")或其他直接指定
CMAKE_BINARY_DIR、CMAKE_CURRENT_BINARY_DIR的语句,这类设置会覆盖命令行-B参数。追踪路径解析过程
在CMake配置命令中添加调试参数,查看路径解析细节:cmake -Bbuild -DCMAKE_INSTALL_PREFIX=../install_folder . --debug-output重点查看日志中关于
CMAKE_BINARY_DIR和CMAKE_INSTALL_PREFIX的解析结果,确认是否存在路径被错误重定向的情况。排查环境变量干扰
检查是否有环境变量覆盖了CMake参数,执行:printenv | grep CMAKE如果输出中存在
CMAKE_BINARY_DIR、CMAKE_INSTALL_PREFIX等变量,说明环境变量会优先于命令行参数,导致-B和-DCMAKE_INSTALL_PREFIX失效。使用绝对路径测试
将构建目录和安装目录改为绝对路径,排除相对路径解析的问题:cmake -B/your/absolute/path/to/build -DCMAKE_INSTALL_PREFIX=/your/absolute/path/to/install_folder . cmake --build /your/absolute/path/to/build --target install验证是否能正常生成build目录和install_folder目录。
确认install目标的执行逻辑
成功编译时未出现install目录是正常的——只有执行--target install时,CMake才会将文件安装到CMAKE_INSTALL_PREFIX指定的路径(即项目上级目录的install_folder,而非项目根目录的install),检查成功环境中是否确实执行了完整的install步骤。
内容的提问来源于stack exchange,提问作者gundom02

