Make

在 makefile 的 LD 標誌中,將特定於平台的庫的 dir 優先於 /usr/lib 是否更好?

  • March 7, 2020

我的解決方案(用於 Raspbian Buster)的 makefile 包含如下LDFLAGS定義:

LDFLAGS=-L/usr/lib -L/usr/lib/arm-linux-gnueabihf

…因此標準的 libdir 優先於特定於平台的 libdir。不幸的是,我在使用 中的一個庫時遇到了一些麻煩,/usr/lib由於 C++ ABI 過時,無法連結到該庫。但是,當我交換目錄時,一切正常:

LDFLAGS=-L/usr/lib/arm-linux-gnueabihf -L/usr/lib

在通用之前聲明依賴於平台的 libdirs 通常是更可取的/usr/lib嗎?謝謝你。

**更新:**相應的配方是相當標準的,內容如下:

$(EXEC) : $(OBJECTS)
   $(CC) $(CFLAGS) $(OBJECTS) -o $(EXEC) $(LDFLAGS) $(LIBRARIES)

$(OBJECTS) : $(SRC)
   $(CC) $(CFLAGS) -c $(SRC)

使用LDFLAGS是最後的幫手。如果您在 makefile 中使用它,這是使您的軟體不可移植的好方法。

更好地編寫直接使用所需ld命令行的 Makefile。

例如,您可以使用如下命令行:

$(CC) $(CFLAGS) $(OBJECTS) -o $@ $(LDPATH:%=-L%) $(LIBRARIES)

並將庫搜尋的搜尋目錄列表放入LDPATH.

請注意,用於的模式匹配宏擴展LDPATH不是 POSIXmake規範的一部分,但該功能已由 SunPro Make 在 1986 年引入,並被許多 make 實現複製,嗯smakegnu make. 如果您有較舊的make,則需要-Lpath在命令行中為每個庫搜尋目錄手動使用一個條目。

引用自:https://unix.stackexchange.com/questions/570468