簡體   English   中英

我是否總是需要 CMake 中的目標?

[英]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}下生成的,我可以稍后安裝它們。

但上面的代碼不起作用,因為我必須使用錯誤消息中的TARGETOUTPUT 所以如果我使用一個虛擬的:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM