我遇到了自定义目标(使用add_custom_target创建)的add_custom_command问题。cmake:只有第一次调用add_custom_command
我的一般想法是将静态代码分析工具合并到cmake工具链中。我的解决方案是基于这里所描述的一个:https://github.com/rpavlik/cmake-modules/blob/master/CppcheckTargets.cmake
概括地说,我要运行静态代码分析有下面的代码两行各项目:
include(cppcheck)
add_cppcheck(${le_project} STYLE POSSIBLE_ERROR FAIL_ON_WARNINGS)
该模块有这个在该文件的顶部:
if (NOT TARGET ANALYZE_CODE)
add_custom_target(ANALYZE_CODE WORKING_DIRECTORY ${LE_LITEN_ROOT})
set_target_properties(ANALYZE_CODE PROPERTIES EXCLUDE_FROM_ALL TRUE)
endif()
,后来在功能添加自定义命令:
add_custom_command(TARGET
ANALYZE_CODE
PRE_BUILD
COMMAND
${CPPCHECK_EXECUTABLE}
${CPPCHECK_QUIET_ARG}
${CPPCHECK_TEMPLATE_ARG}
${_cppcheck_args}
${_files}
WORKING_DIRECTORY
"${CMAKE_CURRENT_SOURCE_DIR}"
COMMENT
"${_name}_cppcheck: Running cppcheck on target ${_name}..."
VERBATIM)
我看到的问题是该命令仅添加了包含该文件的项目。我不知道为什么和发生了什么。我核实了以下使用消息()命令:
- 目标只创建一次
- 的add_custom_command运行对每个调用该函数的项目,在适当的参数
但是当我真正在Visual Studio中查看目标,只添加第一个包含/函数调用命令。
如果仅在未调用该函数的情况下才包含该文件,则根本不添加任何自定义命令。
期望的行为:
我想命名为“ANALYZE_CODE”一个目标来运行通过调用函数添加的所有命令。
I.e.如果3个项目包含上面的两行,则会创建一次目标ANALYZE_CODE,但会向其添加3个自定义命令,每个项目一个。
我想我可能一直不清楚是什么其实我是想发生,并且更新了我原来的职位。但我打算只有一个目标,但是在构建目标时会运行多个自定义命令。 – Max
啊 - 好的。我会删除这个。 – Fraser
@Max我重构了我的答案一点点:-) – Fraser