对于自定义目标(使用 add_custom_target 创建),我遇到了 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)
我看到的问题是该命令仅针对首先包含该文件的项目添加。我不确定为什么以及发生了什么。我使用 message() 命令验证了以下内容:
- 目标只创建一次
- add_custom_command 为调用该函数的每个项目运行,并带有适当的参数
但是当我实际在visual studio中查看目标时,只添加了第一个包含/函数调用命令。
如果只包含文件而不调用函数,则根本不添加任何自定义命令。
期望的行为:
我想要一个名为“ANALYZE_CODE”的目标来运行调用函数添加的所有命令。
即,如果 3 个项目包括上面的两行,则创建一次目标 ANALYZE_CODE,但会向其中添加 3 个自定义命令,每个项目一个。