CMake子目录包含其项目文件的主目录

时间:2014-03-16 11:42:06

标签: cmake

我正在尝试在项目中使用库。我下载了它并将其放在我保留项目所需的所有外部库的文件夹中。

当我将库作为CMakeLists.txt中的子目录添加并运行cmake时,库的CMakeLists.txt将其许可证(替换我的许可证)和许多其他文件复制到CMAKE_BINARY_DIR。

我不希望他们在那里。我想以某种方式将这些文件保存在库的自己的目录中。我如何实现这一目标?

我可以在调用子目录之前以某种方式设置CMAKE_BINARY_DIR吗?

我不想编辑库的CMakeLists.txt。

以下是复制文件:

的CMakeLists.txt:

project(MYPROJECT)

add_subdirectory(annoyer)

annoyer /的CMakeLists.txt:

project(ANNOYER)

file(COPY annoyingfile.txt DESTINATION ${CMAKE_BINARY_DIR})

运行cmake CMakeLists.txt时,annoyingfile.txt将移至顶级目录。我希望它留在annoyer/

3 个答案:

答案 0 :(得分:1)

CMAKE_BINARY_DIR始终引用顶级项目的二进制目录。

使用CMAKE_CURRENT_BINARY_DIR来引用当前项目的二进制目录。

CMAKE_SOURCE_DIR / CMAKE_CURRENT_SOURCE_DIR也是如此。

答案 1 :(得分:0)

您应该尝试使用add_subdirectory()的可选第二个参数,它允许您指定二进制目录。像这样:

add_subdirectory(annoyer, annoyer_bin)

这应该避免annoyer因为内容构建烦恼而烦恼你的问题,并且还将其输出隔离在一个单独的子目录中。

答案 2 :(得分:0)

使用ExternalProject模块。这将它限制在自己的顶级目录中。

然后,您需要明确设置依赖关系,并通过众多方法之一使用生成的二进制文件。