【发布时间】:2013-10-22 21:34:31
【问题描述】:
对于自定义目标(使用 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 个自定义命令,每个项目一个。
【问题讨论】:
标签: visual-studio cmake cmake-custom-command