将目标添加到所有子文件夹

时间:2014-06-24 17:34:20

标签: cmake

我正在开发如下构建的库项目

Base/
  CMakeLists.txt
  src/
  tools/
     CMakeLists.txt
  tests/
     CMakeLists.txt
  debug/
  release/

CMakeLists.txt中的主Base/包含构建库的目标,其源位于src/,我有一个配置来创建debug/和{{1}并调用release/来获取构建结构。

这导致以下结构

cmake -DCMAKE_RELEASE_TYPE=<DEBUG|RELEASE> ..

debug/ Makefile tests/ Makefile tools/ Makefile tools/内置的程序会创建输出文件,我试图为创建的构建结构中的每个Makefile创建一个tests/目标。

我已经使用了clean_output但它并没有携带add_custom_target(clean_output rm -rf *.ext)tests/中的Makefile文件。我已经尝试在这些目录中的tools/文件中添加相同的命令,但是我收到一条错误消息,我无法定义已在同一项目中定义的目标。

我尝试将CMakeLists.txtWORKING_DRECTORYCMAKE_CURRENT_LIST_DIR结合使用无效。

有谁知道如何在项目的所有目录中定义自定义目标?

编辑:我不是要尝试将文件添加到标准CMAKE_CURRENT_BINARY_DIR目标。我正在尝试创建一个额外的clean目标,以便在保留可执行文件的同时删除一些文件。

2 个答案:

答案 0 :(得分:2)

您可以指定工作目录和若干命令在一个目标中执行。 顺便说一句,你可以使用cmake -E remove_directory

add_custom_target(
    clean_output
    COMMAND
    "${CMAKE_COMMAND}" -E remove_directory "${CMAKE_CURRENT_LIST_DIR}/directory/with/exts"
    COMMAND
    "${CMAKE_COMMAND}" -E remove_directory "${CMAKE_CURRENT_LIST_DIR}/other-dir/with/exts"
    WORKING_DIRECTORY
    "${CMAKE_CURRENT_LIST_DIR}"
)

答案 1 :(得分:1)

如果我理解您的问题,您可以使用set_directory_properties ADDITIONAL_MAKE_CLEAN_FILES

完成您想要的任务