es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

cmake add_custom_command pre_build Añadir comando personalizado precompilación en cmake.

Estoy escribiendo un ejemplo de cmake por primera vez.

Aquí está una parte de 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}
)“`

Genera código usando gdbus-codegen-glibmm en la sintaxis de comandos con add_custom_command.

Sin embargo, contrariamente a mis expectativas, cuando realmente hago cmake y make, se ve así:

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 ####

Luego, si continúo con make, se imprime el contenido de COMMAND en addcustomcommand, y se generan los códigos.

Después de comprobar el código generado, proceda de nuevo con cmake .. y make para construir normalmente.

Server / CMakeLists.txt, Client / CMakeLists.txt
Establecí la dependencia de ${CODEGEN_TARGET} usando ADD_DEPENDENCIES en, pero funciona de manera diferente a lo que esperaba.

¿Cómo puedo hacer que se ejecute primero el comando gdbus-codegen-glibmm?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para asegurarse de que el comando gdbus-codegen-glibmm se ejecute antes del comando ADD_EXECUTABLE, puede agregar la opción ALL al comando add_custom_target(), de esta forma:

    add_custom_command(
       OUTPUT ${CODEGEN_SRC}
       PRE_BUILD
       COMMAND ${CODEGEN_CMD} ${SERVICE_XML} --generate-cpp-code=${CMAKE_CURRENT_SOURCE_DIR}/include/gen/testGenCode
       COMMENT "Generar código gdbus"
    )
    
    add_custom_target(${CODEGEN_TARGET} ALL
       DEPENDS ${CODEGEN_SRC}
    )
    

    Con la opción ALL, el objetivo personalizado se construirá por defecto al ejecutar make, asegurando que el comando gdbus-codegen-glibmm se ejecute primero y que el archivo ${CODEGEN_SRC} se cree antes de que se requiera por el comando ADD_EXECUTABLE.

    También, tenga en cuenta que he corregido la sintaxis del comando para la opción --generate-cpp-code en el argumento CODEGEN_CMD en la llamada de add_custom_command() .

Comments are closed.