给出以下最小例子。
cmake_minimum_required(VERSION 2.8)
project(include_test)
add_custom_command(OUTPUT OtherCMakeLists.txt
COMMAND "${CMAKE_CURRENT_BINARY_DIR}/create_other_cmakelists")
add_custom_target(do_something DEPENDS OtherCMakeLists.txt)
此处do_something
应该首先创建OtherCMakeLists.txt
。现在,让我们假设do_something
之后必须做其他,例如编译一些代码。我希望当执行其他内容的目标时,CMakeLists.txt
的行为就像OtherCMakeLists.txt
中包含include
一样。
这可能吗?
作为一个例子,为什么这可能有用:OtherCMakeLists.txt
可能会添加一些对进一步编译有影响的编译器标志。
答案 0 :(得分:1)
add_custom_command有两个不同的签名:
add_custom_command(OUTPUT ...)
将在构建时执行 ,为时无法应用生成的生成的CMakeLists.txt中的规则。add_custom_command(TARGET ...)
将特定命令附加到目标。此命令可以在PRE_BUILD,PRE_LINK或POST_BUILD上运行。可能不是你想要达到的...... 如果您尝试在编译过程中添加一些动态,则添加自定义命令或目标可能不是您的最佳选择。
您应该尝试阅读其他一些CMack命令的文档,这些命令对您的案例很有帮助:
答案 1 :(得分:1)
据我所知,无法使用自定义目标/命令生成CMakeLists.txt文件,并使用include
CMake命令生成CMakeLists.txt
问题是include
命令是在所谓的"配置时间" (当cmake
可执行文件尝试解析所有CMakeLists.txt时),但文件生成(CMakeLists.txt)在"构建时间" (在生成的构建系统上调用make
命令时)