[英]Do I always need a target in CMake?
我有一個 python 腳本,它為我生成一些文件,在我的腳本中,我有一個參數--outputdir
來指定 output 文件的位置。 我想運行這個腳本來生成這些文件並在以后安裝它們。 我用了
add_custom_command(
COMMAND python3.6 ${CMAKE_CURRENT_SOURCE_DIR}/generateFiles.py
ARGS --outputdir ${CMAKE_CURRENT_BINARY_DIR})
所以 output 文件是在${CMAKE_CURRENT_BINARY_DIR}
下生成的,我可以稍后安裝它們。
但上面的代碼不起作用,因為我必須使用錯誤消息中的TARGET
或OUTPUT
。 所以如果我使用一個虛擬的:
add_custom_target(dummy ALL)
add_custom_command(
TARGET dummy
COMMAND python3.6 ${CMAKE_CURRENT_SOURCE_DIR}/generateFiles.py
ARGS --outputdir ${CMAKE_CURRENT_BINARY_DIR})
這剛剛奏效,我可以看到文件是在${CMAKE_CURRENT_BINARY_DIR}
下生成的。 我相信如果我使用類似的東西:
add_custom_target(dummy
COMMAND python3.6 ${CMAKE_CURRENT_SOURCE_DIR}/generateFiles.py
ARGS --outputdir ${CMAKE_CURRENT_BINARY_DIR})
這也應該有效。 我的問題是為什么我仍然需要一個dummy
目標? 實際上,只需使用COMMAND
我就可以運行我的腳本,使用 args 我可以指定 output 文件的生成位置,然后使用一些安裝命令我可以安裝文件。 那么在這種情況下使用dummy
目標是否正確,我必須使用它嗎? 注意generateFiles.py
在構建過程中不會更改,並且每次都會生成相同的文件。 謝謝,我是 CMake 的新手。
在項目構建期間執行的所有操作都是作為某個目標的一部分執行的。
這是 CMake 的概念,它與許多構建工具的概念相關:Make、Ninja、MSVC 等。因為 CMake 實際上將構建項目的工作委托給其中一個構建工具,所以概念的相似性非常重要。
所以是的,當你想在構建過程中聲明一些要執行的命令時,你需要將此命令添加到某個目標:
add_custom_target
創建新目標add_custom_command(TARGET)
將 COMMAND 附加到指定的目標add_custom_command(OUTPUT)
將命令附加到目標,這取決於 OUTPUT 子句中給出的文件。 請注意,雖然 CMake 具有默認執行的all
目標的概念(當未指定目標時),但它不允許將命令直接附加到該目標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.