cmake add_custom_command pre_build

cmake add_custom_command pre_build

第一次写cmake例子

这是CMakeFiles.txt的一部分:

add_custom_command(
   OUTPUT ${CODEGEN_SRC}
   PRE_BUILD
   COMMAND ${CODEGEN_CMD} ${SERVICE_XML} --generate-cpp- code=/home/hello/include/gen/testGenCode
   COMMENT "Generate gdbus code"
)

add_custom_target(${CODEGEN_TARGET}
    DEPENDS ${CODEGEN_SRC}
)

在使用 add_custom_command 的命令语法中使用 gdbus-codegen-glibmm 生成代码。

然而,出乎我意料的是,当我真正进行cmake和make时,它看起来是这样的:

cmake ..
CMake Error at Server/CMakeLists.txt:1 (ADD_EXECUTABLE):
  Cannot find source file:
           #### generate File ####
CMake Error at Client/CMakeLists.txt:36 (ADD_EXECUTABLE):
  Cannot find source file:
           #### generate File ####

然后再make,输出add_custom_command中COMMANT的内容,真正生成代码

查看生成的代码后,继续cmake..再次make即可正常构建。

Server/CMakeLists.txt, Client/CMakeLists.txt 我在 中使用 ADD_DEPENDENCIES 设置了 ${CODEGEN_TARGET} 的依赖项,但它的工作方式与我预期的不同。

如何让 gdbus-codegen-glibmm 命令先到 运行?

add_custom_command 将在构建阶段 运行 命令(当 运行ning make 时)。由于它会生成下一个目标所需的文件,如果文件从未生成过,它将失败。

您也可以在 运行ning cmake 时配置文件,除了 add_custom_command() 之外还使用 execute_process()。您还可以使用 configure_file() 为目标创建占位符,然后在 运行ning make.

时使用 gdbus-codegen-glibmm 擦除它。