如何在目标执行后包含cmake Makefile?

时间:2015-05-21 07:05:28

标签: cmake

给出以下最小例子。

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可能会添加一些对进一步编译有影响的编译器标志。

2 个答案:

答案 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命令时)