在add_custom_command中连接多个文件

我们的应用程序需要提供一个.xsd文件,该文件由多个其他.xsd文件连接在一起组成。连接的源列表可以通过遍历所有库依赖关系并检查其上的属性来派生。在add_custom_command中连接多个文件

我最终什么样的主意是,应用程序的可的CMakeLists.txt只是调用一个函数,它会“做正确的事”:工作

function(make_config_xsd) 

set(xsd_config ${CMAKE_CURRENT_BINARY_DIR}/config.xsd)

# build up a list of config files that are going to be concatenated

set(config_list ${appcommon_SOURCE_DIR}/config/common.xsd)

# iterate over the library dependencies and pull out config_file properties

get_target_property(libraries ${PROJECT_NAME} LINK_LIBRARIES)

foreach(lib ${libraries})

get_target_property(conf ${lib} config_file)

if(conf)

list(APPEND config_list ${conf})

endif()

endforeach()

# finally, add the app specific one last

list(APPEND config_list ${PROJECT_SOURCE_DIR}/config/config.xsd)

add_custom_command(OUTPUT ${xsd_config}

COMMAND echo \"<?xml version=\\"1.0\\"?><xs:schema xmlns:xs=\\"http://www.w3.org/2001/XMLSchema\\">\" > ${xsd_config}

COMMAND cat ${config_list} >> ${xsd_config}

COMMAND echo \"</xs:schema>\" >> ${xsd_config}

DEPENDS "${config_list}")

add_custom_target(generate-config DEPENDS ${xsd_config})

add_dependencies(${PROJECT_NAME} generate-config)

endfunction()

出现。但我不确定它是否真的是解决这个问题的“正确方法”,并假设add_custom_target()只取决于add_custom_command()的输出,这样我就可以做add_dependencies()似乎也不错。有没有一种更直接的方式来执行这种生成文件的依赖关系?

回答:

由于Tsyvarev指出,只需将生成配置文件添加到目标的源列表。

也就是说,替换:

add_custom_target(generate-config DEPENDS ${xsd_config}) 

add_dependencies(${PROJECT_NAME} generate-config)

只:

target_sources(${PROJECT_NAME} ${xsd_config}) 

以上是 在add_custom_command中连接多个文件 的全部内容, 来源链接: utcz.com/qa/266990.html

回到顶部