GNU 自動工具(autoconf 和 automake)的檔案解釋了如何測驗所需庫的存在。如果找到該庫,autotools 會將其包含在 LIBS 中,以確保任何生成的目標檔案都正確鏈接到它。如果未找到該庫,autotools 會生成錯誤訊息。
對于庫,可以使用以下宏:
AC_SEARCH_LIBS(function, libraries-list, action-if-found, action-if-not-found, extra-libraries)
例如
AC_SEARCH_LIBS([cos], [m], [], [AC_MSG_ERROR([unable to find the cos() function in the math library])])
你如何告訴 GNU autoconf / automake 對特定的 Apple 框架做同樣的事情?
我可能可以使用以下內容來檢查特定框架是否存在:
AC_CHECK_FILE(file, [action-if-found], [action-if-not-found])
但是我如何告訴 GNU autotools 確保我的目標檔案鏈接到特定的 Apple 框架?
(我的程式(用 C 撰寫)需要鏈接到 AppleCoreServices框架)。
對于命令列上的手動構建,通常會告訴編譯器在哪里可以找到框架并告訴它鏈接您的目標檔案。
例如
clang -o MyProgram Source.c -F/System/Library/Frameworks -framework CoreServices -L/opt/local/lib -lmpeg2
當涉及到 Apple Frameworks 時,可以使用 GNU autotools 嗎?如果沒有,有人可以建議另一種旨在輕松生成 Apple Mac 軟體開發的 makefile 的工具嗎?
uj5u.com熱心網友回復:
你如何告訴 GNU autoconf / automake 對特定的 Apple 框架做同樣的事情?
這都是關于鏈接選項的,并且所有 Autotools 處理編譯和鏈接選項的常用方法都在起作用。
如果您正在談論使用現有的自動工具,那么原則上,您可以在configure的環境中指定適當的附加鏈接標志。例如:
LDFLAGS='-framework CoreServices' ./configure
除非有問題的特定自動工具做了什么來破壞它,./configure否則在執行庫檢查時將使用指定的聯結器標志。然后,您不需要重復該操作make或將其明確包含在Makefile.am.
如果您正在撰寫自動工具,那么您可以做各種各樣的事情,從沒有特別的(如上所述)到自動檢測和/或猜測,再到提供一個--with或--enable選項以允許用戶選擇和激活特定框架和框架檔案夾以及攜帶適當的鏈接選項到make。您不需要以與其他方式不同的方式撰寫AC_SEARCH_LIBS或AC_CHECK_LIB呼叫,但在某些情況下,您可能希望創建一個或多個額外的輸出變數來傳達框架選擇的鏈接選項。
我知道這有點含糊,但問題也是如此。
uj5u.com熱心網友回復:
看起來可以告訴 automake 使用特定的 Apple Mac 框架。它是通過將以下內容添加到 Makefile.am 來完成的:
AM_LDFLAGS = -F/System/Library/Frameworks -framework CoreServices
OR
programname_LDFLAGS = -F/System/Library/Frameworks -framework CoreServices
如果您想檢查框架是否確實存在,則必須在 configure.ac 中添加該檢查(大概是通過使用AC_CHECK_FILE宏)。
太糟糕了,autotools 沒有用于 configure.ac 的宏,類似于AC_SEARCH_LIBS不僅檢查框架實際存在而且還將其添加到變數(例如 FRAMEWORKS 或 AM_LDFLAGS)以供 automake 用于鏈接目的的宏。也許,可以通過創建自己的 M4 宏來完成。M4 宏非常強大。
PS 您不需要包含-F/System/Library/Frameworks在AM_LDFLAGSetc. 中,如上所示,因為這是 Mac 上 Frameworks 的標準搜索路徑。(但-F如果框架位于非標準位置,您將需要包含該標志)。
無論如何,您仍然需要包含-framework CoreServices在AM-FLAGS以確保您的程式正確鏈接到框架。(這與添加庫標志(例如-lmpeg2)以確保在鏈接階段將所需的庫鏈接到您的程式沒有什么不同)。在運行 ./configure 時,您不應將其留給用戶。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/378804.html
