我遇到了自定義目標(使用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