例如,假设有四个文件夹(app1、app2、app3 和 main),如下所示
main
|__ CMakeLists.txt
\__ module1
|______ CMakeLists.txt
|______ sub1.cpp
|______ sub1.h
\__ library5
|______ CMakeLists.txt
|______ sub5.cpp
|______ sub5.h
\__app1
\__app2
\__app3
module1 的哪个输出是 module1.dll,library5 的输出是 lib5.dll。app1 的文件夹必须包含 module1.dll 和 lib5.dll,app2 需要 lib5.dll,最后 app3 需要 module1.dll(应用程序、模块和库的数量比这个例子多,正如我在下面解释的那样,我们不想改变modules/libraries's CMakeLists.txt
,只是 main'sCMakeLists.txt
是我们的)。
PS:
我有一个cmake
项目,它有几个库和模块。它们使用add_subdirectory
命令包含在我的项目中(请注意,我的项目只是由多个模块组成,并且没有任何add_library
or add_target
)。
我需要复制库/模块的输出 而不更改它们CMakeLists.txt
(add_custom_command
使用POST_BUILD
选项实际上不是一个好的选择,因为此时我需要更改它们不只是属于我的项目CMakeLists.txt
的库/模块)。另一方面,它必须在具有其他(库/模块)的外部(主要)中完成。 CMakeLists.txt
我尝试了其他一些命令,例如file (COPY )
andconfigure_file()
但我认为它们在生成cmake-cache
阶段运行,并且只能复制存在于预构建阶段的资源文件。
此外,在另一种方法中,我编写了一个 bash 脚本文件来复制文件并CMakeLists.txt
通过下面的命令在专业中调用它。
add_custom_target (copy_all
COMMAND ${CMAKE_SOURCE_DIR}/copy.sh ${files}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
有files
文件列表。但是副本没有执行!我手动测试了按需要工作的脚本。但我不知道为什么它不能在 CMakeLists.txt 中调用。
我该怎么做才能将子项目的输出从专业复制到某些位置CMakeLists.txt
?