[英]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.