gpt4 book ai didi

c++ - CMake 中相对路径的绝对路径

转载 作者:行者123 更新时间:2023-11-30 02:24:53 55 4
gpt4 key购买 nike

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

最佳答案

给定: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

如果您依赖常见的第 3 方库,您可能会从 Hunter 中受益:

https://github.com/ruslo/hunter

关于c++ - CMake 中相对路径的绝对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45083285/

55 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com