2017-01-10 8 views
0

docs_htmlALLを条件付きで含める場合は、cmake-guiの$ {DO_HTML}スイッチを選択してください。どのようにこの醜いコードの繰り返しなしで行うには?add_custom_target()に条件付きでALLオプションを追加する方法は?

cmake_minimum_required(VERSION 3.3 FATAL_ERROR) 
project(docs) 

set(DO_HTML 1 CACHE BOOL "Whether generate documentation in static HTML") 

if (${DO_HTML}) 
#This command doesn't work: 
#  add_dependencies(ALL docs_html) 

    add_custom_target(docs_html ALL #Code repeat 1 
     DEPENDS ${HTML_DIR}/index.html 
    ) 
else() 
    add_custom_target(docs_html  #Code repeat 2 
     DEPENDS ${HTML_DIR}/index.html 
    ) 
endif() 

答えて

1

あなたは条件付き部品コマンドの呼び出しのを形成するために、変数の間接参照を使用することができます。空の値(変数が存在しない場合、例えば)単に無視される:

# Conditionally form variable's content. 
if (DO_HTML) 
    set(ALL_OPTION ALL) 
# If you prefer to not use uninitialized variables, uncomment next 2 lines. 
# else() 
# set(ALL_OPTION) 
endif() 

# Use variable in command's invocation. 
add_custom_target(docs_html ${ALL_OPTION} 
     DEPENDS ${HTML_DIR}/index.html 
) 

変数コマンドにもいくつかのパラメータを含んでいてもよいです。例えば。ターゲットに対して追加のCOMMAND句を条件付きで追加することができます。

if(NEED_ADDITIONAL_ACTION) # Some condition 
    set(ADDITIONAL_ACTION COMMAND ./run_something arg1) 
endif() 

add_custom_target(docs_html ${ALL_OPTION} 
    ${ADDITIONAL_ACTION} 
    DEPENDS ${HTML_DIR}/index.html 
) 
関連する問題