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