Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 将目标添加到所有子文件夹_Cmake - Fatal编程技术网

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

Cmake 将目标添加到所有子文件夹,cmake,Cmake,我正在做一个图书馆项目,如下所示 Base/ CMakeLists.txt src/ tools/ CMakeLists.txt tests/ CMakeLists.txt debug/ release/ Base/中的mainCMakeLists.txt包含构建库的目标,其源代码位于src/中,我有一个配置来创建debug/和release/并调用cmake-DCMAKE\u release\u TYPE=..以获取构建结构 这将导致以下结构 de

我正在做一个图书馆项目,如下所示

Base/
  CMakeLists.txt
  src/
  tools/
     CMakeLists.txt
  tests/
     CMakeLists.txt
  debug/
  release/
Base/
中的main
CMakeLists.txt
包含构建库的目标,其源代码位于
src/
中,我有一个配置来创建
debug/
release/
并调用
cmake-DCMAKE\u release\u TYPE=..
以获取构建结构

这将导致以下结构

debug/
   Makefile
   tests/
      Makefile
   tools/
      Makefile
内置于
tools/
tests/
中的程序创建输出文件,我正在尝试为创建的构建结构中的每个Makefile创建一个
clean\u输出
目标

我使用了
add\u custom\u target(clean\u output rm-rf*.ext)
,但它没有携带到
tests/
tools/
中的Makefile文件中。我试图在这些目录中的
CMakeLists.txt
文件中添加相同的命令,但收到一条错误消息,我无法定义同一项目中已定义的目标

我曾尝试将
WORKING\u DRECTORY
CMAKE\u CURRENT\u LIST\u DIR
CMAKE\u CURRENT\u BINARY\u DIR
结合使用

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


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

如果我理解你的问题,你可以用完成你想要的事情如果我理解你的问题,你可以用完成你想要的事情如果我理解你的问题,如果我理解你的问题,你可以用

完成你想要的,你可以用

完成你想要的。你可以指定工作目录和几个命令在一个目标中执行。 顺便说一句,您可以使用
cmake-E remove\u目录

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}"
)

可以在一个目标中指定要执行的工作目录和多个命令。 顺便说一句,您可以使用
cmake-E remove\u目录

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}"
)

可以在一个目标中指定要执行的工作目录和多个命令。 顺便说一句,您可以使用
cmake-E remove\u目录

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}"
)

可以在一个目标中指定要执行的工作目录和多个命令。 顺便说一句,您可以使用
cmake-E remove\u目录

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}"
)


Cmake内置了清洁目标。尝试使用
set\u directory\u properties(directory ADDITIONAL\u MAKE\u CLEAN\u FILES)
但这仍然会删除可执行文件,对吗?我正在尝试设置一个目标,仅清除输出文件。在将我的项目移植到cmake之前,我有三个不同的目标,
clean
clean\u all
clean\u output
。cmake内置了clean target。尝试使用
set\u directory\u properties(directory ADDITIONAL\u MAKE\u CLEAN\u FILES)
但这仍然会删除可执行文件,对吗?我正在尝试设置一个目标,仅清除输出文件。在将我的项目移植到cmake之前,我有三个不同的目标,
clean
clean\u all
clean\u output
。cmake内置了clean target。尝试使用
set\u directory\u properties(directory ADDITIONAL\u MAKE\u CLEAN\u FILES)
但这仍然会删除可执行文件,对吗?我正在尝试设置一个目标,仅清除输出文件。在将我的项目移植到cmake之前,我有三个不同的目标,
clean
clean\u all
clean\u output
。cmake内置了clean target。尝试使用
set\u directory\u properties(directory ADDITIONAL\u MAKE\u CLEAN\u FILES)
但这仍然会删除可执行文件,对吗?我正在尝试设置一个目标,仅清除输出文件。在将我的项目移植到cmake之前,我有三个不同的目标,
clean
clean\u all
clean\u output
。这很好,但这并不是我想要做的。我编辑了我的问题以使它更清楚。知道这一点很好,但这并不是我想要做的。我编辑了我的问题以使它更清楚。知道这一点很好,但这并不是我想要做的。我编辑了我的问题以使它更清楚。知道这一点很好,但这并不是我想要做的。我编辑了我的问题以使其更清晰。我使用
CMAKE\u CURRENT\u BINARY\u DIR重写了它,它适用于根构建目录,但它仍然没有将目标添加到子目录中的makefile中(我编辑了关于它的详细信息)。没有办法将目标添加到所有Makefiles中吗?@Lexiel我怀疑这是可能的,因为cmake是一个跨平台工具。您所要求的只应用于Makefile,但对于像
Xcode
这样的生成器来说没有意义。顺便说一句,AFAIK make有
-C
选项,所以您尝试过
make-C。。targetname
?谢谢<代码>生成-C。。clean_output
是我现在所做的,我希望能够在结构中有本地目标。特别是由于随着项目的发展,目录结构将变得更加复杂。但如果在cmake中不可能,我将寻找一个解决方法。@Lexiel
我将寻找一个解决方法,而不是你需要从不同的角度看待这个问题。可能是更好地组织这个运行测试(
add_test
)或将选项
--clear output
添加到您的测试应用程序(?)我使用
CMAKE_CURRENT_BINARY_DIR
重新编写了它,它适用于根构建目录,但它仍然不会向子目录中的makefile添加目标(我已经编辑了它的外观细节)。没有办法将目标添加到所有Makefiles中吗?@Lexiel我怀疑这是可能的,因为cmake被设计成一个跨平台的工具。你所要求的只适用于Makefile,但对于像
Xcode
这样的生成器来说没有意义。顺便说一句,AFAIK make有
-C
选项,所以你试过