2012-12-15 51 views
0

我有很多自定義的CMake命令,所以我最終在構建腳本中重複了這種模式。CMake中的自動變量

set(PREREQ ${CMAKE_CURRENT_SOURCE_DIR}/foo.txt ${CMAKE_CURRENT_SOURCE_DIR}/bar.txt) 
add_custom_command(
    OUTPUT baz.txt 
    COMMAND cat ${PREREQ} > baz.txt 
    DEPENDS ${PREREQ} 
) 
add_custom_target(a ALL DEPENDS baz.txt) 

是否有等同GNU的使自動變量在CMake的([email protected]$<等),所以我可以避免指定的輸入/輸出兩次(依賴關係,輸出和命令)?

我該怎麼幹呢?

回答

1

如何使用自定義函數?對於示例腳本這可能是這樣的:

function (add_custom_command_with_target _targetName _output) 
    add_custom_command(
     OUTPUT ${_output} 
     COMMAND cat ${ARGN} > ${_output} 
     DEPENDS ${ARGN} 
    ) 
    add_custom_target(${_targetName} ALL DEPENDS ${_output}) 
endfunction() 

該功能可以通過以下方式來調用:

add_custom_command_with_target(a baz.txt ${CMAKE_CURRENT_SOURCE_DIR}/foo.txt ${CMAKE_CURRENT_SOURCE_DIR}/bar.txt) 

函數體中您可以使用預定義變量ARGN,其中包含列表超過最後期望的論點的論點。這是您可以獲得GNU Make的預定義變量的最接近的東西。