[英]including a header from a project into a static library
我的項目中有一個子項目(靜態庫)。
由於一堆應用程序可能會使用此靜態庫,因此我的項目中有一個包含應用程序配置的config.h文件。 靜態庫必須讀取它。
問題是添加
#import "config.h"
靜態庫上的文件失敗,因為找不到文件。
我可以在搜索標頭上為我的項目根目錄添加絕對路徑,但是我想對此進行硬編碼,因為此靜態庫將由其他項目使用。 另一個問題是,我不能使用../ ..之類的相對鏈接,例如,因為靜態庫在另一個卷上。
在靜態庫的搜索路徑中包含$(SRCROOT)將為我提供該庫的根目錄,而不是使用它的項目的根目錄,這就是我想要的。
我該如何解決?
請注意我的問題。 我在一個項目使用的靜態庫中。 Config.h在項目中。 我想在我的靜態庫中導入該config.h。
如果有簡便的方法,請告訴我。
我已經在此處和此處上傳了一個示例項目,因此您可以看到我的痛苦。
謝謝
一種方法(有點像hack)是將運行腳本添加到每個應用程序的構建階段 (作為第一項),然后將Config.h復制到某個已知位置-/tmp/Config.h,您所包含的庫將看起來像為此。 由於文件是在每個構建版本上復制的,因此它將永遠是正確的。
EDIT1:不太漂亮,但是您可以在庫中的Dependencies下添加一個Run Build Script。 只需添加一個,然后保留復選框以顯示環境變量即可。 您可以看到這一套:
FILE_LIST = /卷/數據/用戶/ dhoerl /庫/開發人員/Xcode/DerivedData/MyProject-fdzaatzqtmrnzubseakedvxmsgul/Build/Intermediates/MyStaticLibrary.build/Debug-iphoneos/MyStaticLibrary.build/Objects/LinkFileList
您會看到,其中一些具有當前項目文件夾的前綴:
/卷/數據/用戶/程序/庫/開發人員/ Xcode / DerivedData / MyProject-
您可以在此處編寫一些腳本以獲取前綴,然后追加本地Config.h文件路徑,現在您具有Config.h標頭的完全限定路徑,然后可以將其復制到庫中的已知位置。 我將在xcode論壇上發帖,因為可能會有更好的解決方案-Xcode 3中曾經有過。如果我得到實質性的回報,我會進行更新。
EDIT2:試試看:1)單擊庫,單擊“構建階段”,通過點擊右下角的“ +”按鈕添加“運行腳本構建”階段
2)拖動它,使其成為列表中的第二項(在“目標依賴項”下面)
3)將Shell更改為“ / bin / ksh”
4)在編輯它以使其具有正確的文件/路徑后,將其粘貼:
# Get the Project Name (assumes upper/lower/numbers only in name)
PROJ=$(echo $BUILD_DIR | sed -En -e 's/(\/.*\/)([A-Za-z0-9]+)-([a-z]+\/Build\/Products)/\2/p')
# Use this variable to construct a full path
FULL_PATH="/Volumes/Data/Users/dhoerl/Downloads/nightmare/"$PROJ"/"$PROJ"/HelloWorldLayer.h"
echo FULL_PATH equals $FULL_PATH
# Make Sure MyStaticLibrary is correct
echo PROJ_DIR equals "$PROJECT_DIR/MyStaticLibrary"
cp -f "$FULL_PATH" "$PROJECT_DIR/MyStaticLibrary"
5)假定您將庫放置在所需的任何位置,但是每個App項目必須具有相同的父文件夾(沒有太多限制-我過去所做的事情)。
PS:執行此類操作時,通常不包括應用程序的實際文件,而是為未在庫中實例化的類創建頭。 讓我們稱之為Foo。 因此,在您的庫中,您擁有Foo.h,並且它有許多返回信息的方法-小部件的數量,某些特殊文件夾的位置,plists,數組,字典等。 這個想法是庫知道如何通過此接口(單例類,或僅帶有類方法的類。YMMV)獲取所需的信息。
PSS:任何其他閱讀此書的人,都要創建演示項目。
我會走另一條路。 使用其中的編譯器符號將config.h文件作為靜態庫的一部分來切換功能。 然后,在項目中根據所需的功能定義這些符號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.