簡體   English   中英

CMake COMMAND shell參數替換失敗

[英]CMake COMMAND shell parameter substitution failing

我嘗試創建一個cmake自定義目標,將幾個.a文件合並為一個。 請注意,我不能使用OBJECTS lib模式,因為我有很多第三方庫(我在復雜的環境中,conan,cmake等...)。

所以我寫了以下內容

add_custom_target(combineall
    COMMAND echo "extract all .o files from all lib*.a file in the static folder"
    COMMAND for f in *.a ; do ar -x $f ; done
    COMMAND echo "merge all .o files in the static folder"
    COMMAND for f in *.o ; do ar -rs ${CMAKE_BINARY_DIR}/libmerged.a $f ; done
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/static
    DEPENDS MyLib
    )

但是當cmake運行combineall自定義目標時,我收到以下錯誤消息:

從靜態文件夾/ bin / sh中的所有lib * .a文件中提取所有.o文件:-c:第1行:語法錯誤:意外的文件結尾

我想它來自$f 我知道我可以編寫一個完全不同的cmake腳本,使用cmake for_each語法迭代其他.a文件,但這不是我的目標!

問候,亞歷克斯

你必須反斜杠 - 逃避你的分號,並且$ -escape你的$。 CMake正在從命令中刪除它們,因此bash for f in *.a do ar -x done看到for f in *.a do ar -x done ,它因你看到的錯誤而失敗。

所以你的目標應該是:

add_custom_target(combineall
    COMMAND echo "extract all .o files from all lib*.a file in the static folder"
    COMMAND for f in *.a \; do ar -x $$f \; done
    COMMAND echo "merge all .o files in the static folder"
    COMMAND for f in *.o \; do ar -rs ${CMAKE_BINARY_DIR}/libmerged.a $$f \; done
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/static
    DEPENDS MyLib
    )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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