Make
在 makefile 的 LD 標誌中,將特定於平台的庫的 dir 優先於 /usr/lib 是否更好?
我的解決方案(用於 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 實現複製,嗯smake
,gnu make
. 如果您有較舊的make
,則需要-Lpath
在命令行中為每個庫搜尋目錄手動使用一個條目。