在 CMakeLists 文件中指定构建目录
Posted
技术标签:
【中文标题】在 CMakeLists 文件中指定构建目录【英文标题】:Specifying build directory within CMakeLists file 【发布时间】:2021-12-21 21:37:40 【问题描述】:是否可以?如果是,如何。
我的目标是能够在***源目录中调用“cmake”并让 cmake 找出构建目录。
【问题讨论】:
***.com/a/20611964/2288008 【参考方案1】:Afaik,使用CMake
,构建目录始终是您调用cmake
或ccmake
命令的目录。所以如果你想改变构建目录,你必须在运行 CMake 之前改变目录。
要控制完成后放置可执行文件、静态库和共享库的位置,您可以分别修改 CMAKE_RUNTIME_OUTPUT_DIRECTORY
、CMAKE_ARCHIVE_OUTPUT_DIRECTORY
和 CMAKE_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:是不是可以在实际项目文件中指定项目构建依赖项?