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/
中的mainCMakeLists.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
选项,所以你试过