0

我的项目中有一个子项目(静态库)。

由于这个静态库可能被一堆应用程序使用,我的项目中有这个 config.h 文件,其中包含应用程序配置。静态库必须读取它。

问题是添加

#import "config.h" 

静态库上失败,因为找不到文件。

我可以在搜索标题上添加一个绝对路径到我的项目根目录,但我想让它不被硬编码,因为这个静态库将被其他项目使用。另一个问题是我不能使用像 ../.. 这样的相对链接,例如,因为静态库在另一个卷上。

在静态库的搜索路径中包含 $(SRCROOT) 将为我提供该库的根目录,而不是使用它的项目的根目录,这就是我想要的。

我该如何解决?

请注意我的问题。我在一个项目使用的静态库中。Config.h 在项目中。我想在我的静态库中导入那个 config.h。

如果有一个简单的方法可以做到这一点,请告诉我。

我已经上传了一个示例项目到这里这里,所以你可以看到我的痛苦。

谢谢

4

2 回答 2

0

一种方法,有点骇人听闻,是将Run Script添加到每个 App 的Build Phase中,作为第一项,并将 Config.h 复制到某个已知位置 - /tmp/Config.h,您包含的库将看起来在那里。由于文件在每次构建时都被复制,所以它总是正确的。

EDIT1:所以不漂亮,但您可以在库中的依赖项下添加一个运行构建脚本。只需添加一个并保留复选框设置以显示环境变量。你可以看到这一组:

FILE_LIST=/Volumes/Data/Users/dhoerl/Library/Developer/Xcode/DerivedData/MyProject-fdzaatzqtmrnzubseakedvxmsgul/Build/Intermediates/MyStaticLibrary.build/Debug-iphoneos/MyStaticLibrary.build/Objects/LinkFileList

您可以看到其中几个以当前项目文件夹为前缀:

/Volumes/Data/Users/dhoerl/Library/Developer/Xcode/DerivedData/MyProject-

您可以在那里编写一些脚本来获取前缀,然后附加本地 Config.h 文件路径,现在您有了 Config.h 标头的完全限定路径,然后您可以将其复制到库中的已知位置。我将在 xcode 论坛上发帖,因为可能有更好的解决方案 - 曾经在 Xcode 3 中。如果我得到任何实质性的回复,我会更新这个。

EDIT2:试试这个:1)点击库,点击构建阶段,通过点击右下角的“+”按钮添加一个运行脚本构建阶段

2)将其拖动到列表中的第二项(在目标依赖项下方)

3) 将外壳更改为“/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,它有很多返回信息的方法——小部件的数量、一些特殊文件夹的位置、plist、数组、字典等等。这个想法是库知道如何通过这个接口获得它需要的任何东西(类单例,或者只是一个具有类方法的类。YMMV。

PSS:其他人读到这个,创建演示项目是值得的。

于 2013-04-13T22:12:10.490 回答
0

我会走不同的路线。使用其中的编译器符号将此 config.h 文件作为静态库的一部分来切换功能。然后在您的项目中根据您需要的功能定义这些符号。

于 2013-04-14T08:59:13.890 回答