0

我是第一次写 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}
)

gdbus-codegen-glibmm使用命令语法生成代码,使用add_custom_command.

然而,与我的预期相反,当我实际执行 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 我设置了${CODEGEN_TARGET}使用 ADD_DEPENDENCIES in 的依赖关系,但它的工作方式与我预期的不同。

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

4

1 回答 1

1

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

您也可以在运行 cmake 时配置文件,除了 add_custom_command() 之外,还可以使用 execute_process()。您还可以使用 configure_file() 为目标创建一个占位符,然后在运行 make 时使用 gdbus-codegen-glibmm 擦除它。

于 2021-11-25T08:14:55.013 回答