CMake工具链文件包含同目录模块失败问题求助
解决CMake工具链文件中无法引入同目录CMake文件的问题
这个问题我之前配置交叉编译工具链时也踩过坑,核心原因是CMake加载工具链文件时,当前工作目录是你的构建目录(或临时测试目录),而不是工具链文件本身所在的目录。从你的报错信息也能看出来:CMake去了/Users/robert/workspace/cpp/CLIon/rSock/xbuild/build/Darwin_x86_64/CMakeFiles/CMakeTmp/xbuild/cmake/base.cmake找文件,而不是工具链文件所在的xbuild/cmake/目录,这就是相对路径失效的原因。
直接给你最靠谱的解决方案:
- 在你的
A.toolchain.cmake中,使用CMake内置的CMAKE_CURRENT_LIST_DIR变量来拼接路径,这个变量会自动指向当前正在处理的CMake文件(也就是你的工具链文件)的绝对目录。修改include语句为:include(${CMAKE_CURRENT_LIST_DIR}/B.cmake)
为什么这个方法有效?CMAKE_CURRENT_LIST_DIR是CMake专门为解决这类文件路径引用问题设计的,它不受当前工作目录的影响——不管你在哪个目录下运行cmake命令,也不管CMake在哪个临时目录测试工具链,这个变量都会准确指向工具链文件所在的目录,自然就能找到同目录下的B.cmake。
另外提醒一下:不要用CMAKE_SOURCE_DIR或者PROJECT_SOURCE_DIR这类变量,因为在工具链文件加载阶段,这些项目级的变量还没被正确初始化,无法准确定位到工具链文件的目录。
内容的提问来源于stack exchange,提问作者robert
相关产品推荐
相关产品推荐

