在cmake文件中调用现有的make命令

时间:2017-06-12 14:27:39

标签: makefile cmake

我有一个包含多个子目录的大型项目。在父目录中,我有一个CMakeLists.txt文件,该文件调用同一父目录中其他cmake文件中定义的函数。我在其中一个包含一些目标“run”的子目录中有一个自定义Makefile。当我从父目录调用cmake时,我希望执行位于子目录makefile中的“run”目标。我该怎么做?我知道有些人建议使用add_custom_target和add_custom_command,但我仍然对如何应用这些命令来完成此任务感到困惑。

1 个答案:

答案 0 :(得分:15)

如果您知道,哪个文件是由Makefile在子目录中生成的,并且想要依赖这些文件,请使用add_custom_command

add_custom_command(OUTPUT <output-file>
                   COMMAND make run
                   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/<subdir>
)

这假定您的CMakeLists.txt有一个目标,它取决于或使用给定文件。

否则,如果您不关心Makefile生成哪些文件,请使用add_custom_target

add_custom_target(<target_name> COMMAND make run
                   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/<subdir>
)

在这两种情况下, WORKING_DIRECTORY 指定目录当前以执行命令。

如果您希望默认执行目标(在第二种情况下),请在 COMMAND 之前添加 ALL 选项。