2017-05-19 35 views
-1

我的Makefile.am創建可執行文件main:「symplerTest」我想鏈接文件「geometry/source/*。o」。目前我像這樣鏈接它:autotools:Makefile.am:鏈接如果文件存在

symplerTest_LDFLAGS = \ 
    ... 
    geometry/source/*.o 

這是行得通的。但現在在下一步中,我只想鏈接文件* .o存在。我這樣試過一個:

if ("$(wildcard $(geometry/source/*.o))","") 
symplerTest_LDFLAGS += geometry/source/*.o 
endif 

但收到以下錯誤信息:

srcUnittest/Makefile.am:81: error: endif without if 
srcUnittest/Makefile.am:79: warning: wildcard $(geometry/source/*.o: non-POSIX variable name 
srcUnittest/Makefile.am:79: (probably a GNU make extension) 

這個問題似乎是在( 「$(通配符$(幾何/源/ * O))」, 「」)

謝謝!

+1

我懷疑這是一個XY問題。爲什麼在世界範圍內,你會將'.o'文件指定給Automake項目中的鏈接器?這些不是中間構建目標嗎?通常,您可以通過控制將哪些對象分配給可執行文件來控制將哪些對象鏈接到可執行文件中,並讓Automake整理詳細信息。還有其他的選擇,例如構建和依賴便利庫,但是如果你的'Makefile.am'直接對'.o'文件做任何說明,那麼你就很可能是次優路徑。 –

回答

0

您與製作 指令ifeq混淆Automake的指令if

automake的手冊在20 Conditionals 強調:

的Automake支持一種簡單的條件句。

這些條件與GNU Make中的條件不一樣。 Automake 條件在配置時由配置腳本檢查,並影響從Makefile.in到Makefile的翻譯的 。它們基於通過 傳遞的選項進行配置,並根據配置發現的有關主機系統的結果進行配置。 GNU Make條件在創建時被檢查,並且基於傳遞給make程序或在Makefile中定義的變量 。

if根本不是Make指令。 ifeq是一個僞指令,其有效的 參數可能是(arg1, arg2)的形式。

ifeq (arg1, arg2) 

手段,製造,如果arg1等於arg2

表格(arg1, arg2)的參數對於Automake指令if無效。 Automake if指令的有效參數是Automake條件名稱,例如

if DEBUG 

手段,Automake的,如果DEBUG命名條件爲真 - 在 DEBUG是您之前已經通過手段AM_CONDITIONAL 宏 創造了條件名稱。

請參閱鏈接的文檔。

+0

謝謝你的回答!所以沒有可能做一些我只想做的事情? 「如果文件存在鏈接」? –

+1

@ mudi_lou John Bollinger對你的帖子的評論適用。你試圖解決的問題是你沒有解釋的其他問題的錯誤解決方案。你應該問一個關於* that *問題的新問題。 –