CMake中相对路径的绝对路径

时间:2017-07-13 14:14:53

标签: c++ cmake

我一直在尝试构建一个简单的C ++库。在使用相对路径构建的过程中,CMake无法正确配置我的链接库所在的位置。绝对路径配置成功。这是使我不能使用CMake的一些事情。建议路径的推荐方法是什么?它是绝对的还是相对的路径?为什么?

1 个答案:

答案 0 :(得分:2)

给出:cmake -H/foo -B/bar

执行/foo/CMakeLists.txt期间

${CMAKE_CURRENT_SOURCE_DIR} = /foo
${CMAKE_CURRENT_BINARY_DIR} = /bar

在声明project(Foo)

之后
${PROJECT_SOURCE_DIR} = /foo
${PROJECT_BINARY_DIR} = /bar

然后在声明add_subdirectory(foo2)期间,即执行/foo/foo2/CMakeLists.txt

${CMAKE_CURRENT_SOURCE_DIR} = /foo/foo2
${CMAKE_CURRENT_BINARY_DIR} = /bar/foo2
${PROJECT_SOURCE_DIR} = /foo
${PROJECT_BINARY_DIR} = /bar

如果我们遇到另一个嵌套项目:project(Bar)

${CMAKE_CURRENT_SOURCE_DIR} = /foo/foo2
${CMAKE_CURRENT_BINARY_DIR} = /bar/foo2
${PROJECT_SOURCE_DIR} = /foo/foo2
${PROJECT_BINARY_DIR} = /bar/foo2

还有许多其他变量可以帮助您准确定位和定位文件,请参阅

https://cmake.org/Wiki/CMake_Useful_Variables

add_executable这样的命令会试图“弄清楚”非显式文件的位置,但在复杂的项目中,依赖它并不是一个好主意。最好明确地提供路径(使用可用的CMAKE变量)。

最后,如果你经常使用cmake,你会得出结论,源文件组织是它的弱点。

如果你像我一样幸运,你会偶然发现Sugar包裹:

https://github.com/ruslo/sugar

所有源文件(和文档)问题都将消失。

如果你进行交叉编译,你会想要Polly:

https://github.com/ruslo/polly

如果你依赖普通的第三方图书馆,你可能会从亨特那里受益:

https://github.com/ruslo/hunter