在cmake中使用add_custom_target后如何并行运行makefile?

时间:2019-01-14 02:49:11

标签: cmake

我正在遵循this教程,以发布和调试模式构建项目。一切正常,除非我尝试使用make debug -j4并行运行makefile。我收到的警告make[4]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule.

ADD_CUSTOM_TARGET(debug
  COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug ${CMAKE_SOURCE_DIR}
  COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all
  COMMENT "Switch CMAKE_BUILD_TYPE to Debug"
  )

ADD_CUSTOM_TARGET(release
  COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Release ${CMAKE_SOURCE_DIR}
  COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all
  COMMENT "Switch CMAKE_BUILD_TYPE to Release"
  )

我希望make debug -j4 or make release -j4可以工作。但显然不是。

1 个答案:

答案 0 :(得分:1)

目标debug是运行单个作业的单个目标,该作业调用cmake重新创建Makefile,然后使cmake调用make-j4用于一次运行4个作业。但是,没有四项工作只是一项。警告消息来自make,它检测到子进程不再为make,并且无法解释-j选项。

您需要更新规则才能正常工作。

COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} -j 4 --target all

在更新所有Makefile之后进行构建时,将cmake通过make -j 4选项。请参阅Build Tool Mode手册中的cmake