在 CMakeLists 文件中指定构建目录

Posted

技术标签:

【中文标题】在 CMakeLists 文件中指定构建目录【英文标题】:Specifying build directory within CMakeLists file 【发布时间】:2021-12-21 21:37:40 【问题描述】:

是否可以?如果是,如何。

我的目标是能够在***源目录中调用“cmake”并让 cmake 找出构建目录。

【问题讨论】:

***.com/a/20611964/2288008 【参考方案1】:

Afaik,使用CMake,构建目录始终是您调用cmakeccmake 命令的目录。所以如果你想改变构建目录,你必须在运行 CMake 之前改变目录。

要控制完成后放置可执行文件、静态库和共享库的位置,您可以分别修改 CMAKE_RUNTIME_OUTPUT_DIRECTORYCMAKE_ARCHIVE_OUTPUT_DIRECTORYCMAKE_LIBRARY_OUTPUT_DIRECTORY

【讨论】:

是的,我同意你的第一点,但我的目的是能够避免每次我对 CMakeLists 进行更改时“cd”来构建目录。 你不能尝试一个源代码构建(虽然它通常不受欢迎,但在这种情况下它可能是你需要的)?除此之外,这实际上不是 cmake 的问题,而是 make 本身的问题 - 从您调用 make 的任何位置,这就是构建目录。【参考方案2】:

按照设计,没有办法在 CMakeLists.txt 中指定。它旨在让用户能够在他们想要的任何目录中构建项目。典型的工作流程是:

    查看项目源代码。 如果您打算进行源内构建,请转到所需的构建目录或源目录。 运行 cmake 或 ccmake 以在该构建目录中配置项目。 构建您的项目。

在 CMakeLists.txt 中指定的所有目录都应与 $PROJECT_BINARY_DIR 和 $PROJECT_SOURCE_DIR 变量相关。这样,您的代码就可以跨不同平台构建,这是 CMake 的目标。

【讨论】:

同意,但在我看来,能够在 CMakeLists.txt 中指定构建目录可以作为一个选项,它仍将保持跨不同平台的构建。例如而不是做“cmake ../build”,可以在 CMakeLists.txt 中有一个选项,类似于“set(CMAKE_BUILD_DIRECTORY ../build)”,因为这进入项目的顶部 CMakeLists.txt 它应该可以工作。 随时在我们的public issue tracker 上请求此功能。我不确定它是否会受到好评,因为它有点违背通常的 CMake 配置模型,但你可以在那里获得更多的社区讨论。

以上是关于在 CMakeLists 文件中指定构建目录的主要内容,如果未能解决你的问题,请参考以下文章

MSBuild:是不是可以在实际项目文件中指定项目构建依赖项?

如何在 CMake 中指定编译器?

如何在 CMake 中指定编译器?

如何在 .gitlab-ci.yml 中指定通配符工件子目录?

在 Jenks 中指定测试文件夹

Python 构建忽略 yaml 文件,尽管它在 Manifest.in 中指定