我在Linux上運行ar命令與Asterisk問題*.o在command的custom_target。運行此命令時:
target_build_cmd = [
'ar', '-qcs', '/home/bassem/meson/lib.a', meson.project_build_root() '/tmp/*.o',
]
target_dma_lib = custom_target (
'target_lib',
output: lib.a,
build_by_default: true,
command: target_build_cmd,
)
我得到錯誤:
/usr/bin/ar -qcs /home/bassem/meson/lib.a '/home/bassem/meson/crono_dma_driver/tools/meson/bf5/tmp/*.o' /usr/bin/ar: /home/bassem/meson/tmp/*.o: No such file or directory
由于未知原因,它附加了單引號。同時,當我在沒有單引號的情況下手動運行命令時,它可以作業:
ar -qcs /home/bassem/meson/lib.a /home/bassem/meson/crono_dma_driver/tools/meson/bf5/tmp/*.o
另外,當我撰寫其中一個檔案而不是 ASTRISK 時,它可以作業,例如
target_build_cmd = [
'ar', '-qcs', '/home/bassem/meson/lib.a', meson.project_build_root() '/tmp/sysfs.o',
]
我嘗試使用 unicode escape /tmp/\N{ASTERISK}.o,得到了同樣的錯誤。
如何傳遞*.o命令?
介子版本:0.60.3
Linux:5.10.16.3-microsoft-standard-WSL2 #1 SMP Fri Apr 2 22:23:49 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
uj5u.com熱心網友回復:
首先,你用custom_target構建庫有點奇怪——對于這樣的標準操作,有static_libary函式,你檢查過它是否滿足你的需要嗎?
現在,問題本身:介子不支持通配符語法,其原因在參考常見問題解答中:
Meson 不支持這種語法,原因很簡單。這不能既可靠又快速。可靠是指如果用戶將新的源檔案添加到子目錄,Meson 應該檢測到它并自動將其作為構建的一部分。... Meson 的主要后端是 Ninja,它也不支持通配符匹配,原因相同。
因此,按照本書,您應該構建目標檔案陣列并將它們作為輸入引數傳遞,而不是在command 中傳遞。(順便說一句,最好不要重復并明確指定輸出,有占位符:@INPUT@、@OUTPUT@ - 檢查參考)。
但是,正如下一個常見問題解答章節所解釋的那樣,有一種解決方法:將所有內容包裝到自己的腳本中并將其作為命令執行(然后介子以性能、重復、隱藏路徑等為代價失去對正在發生的事情的控制,這看起來不合理在這種情況下)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/407163.html
標籤:
上一篇:bashshell腳本命令替換問題-轉義基本檔案名稱空間-使用ghostscript將多個pdf檔案轉換為jpeg
