我有两个项目,每个项目构建一个静态库,以及另一个使用两个静态库的项目。
两个静态库中的一个构建正常。另一个没有,原因是在自定义shell脚本运行之前,它的公共头文件没有被复制到构建文件夹。
以下是对所发生情况的演示:
SampleA (有效的那个)
Compile MyClass1.cpp ...
Compile MyClass2.cpp ...
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Create universal binary libSampleA.a ...
Copy SampleA.h ...in /Users/user/....
Copy MyClass1.h ...in /Users/user/....
Copy MyClass2.h ...in /Users/user/....
Run custom shell script 'Prepare Framework'
Stripping libSampleA.a
--- Build complete
SampleB (不起作用的那个)
Compile OtherClass1.cpp ...
Compile OtherClass2.cpp ...
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Create universal binary libSampleB.a ...
// >>>>> NO HEADER FILES ARE COPIED <<<<<<
Run custom shell script 'Prepare Framework'
--- Build fails (header folder does not exist)
我当前的设置是一个包含所有3个项目的工作区,但我曾经有一个项目,每个静态库也有一个嵌套项目。我在两个设置中的问题都是一样的。
更多信息
"$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts/include"
和/或"$(PROJECT_TEMP_DIR)/../UninstalledProducts/include"
两个库之间的一个区别是SampleB(不构建的那个)包含来自SampleA的各种头文件。没有编译器或链接器错误,只是我描述的构建结束时的错误。
来源
我用于创建库以及尝试解决问题的一些来源:
那么,你知道在构建过程中是什么触发了要复制或不复制的标题吗?
我怀疑即使将一个头文件添加到“复制标题”阶段或“复制文件”阶段,至少应复制此文件。但事实证明,这不是发生的事情,至少在我的情况下。
答案 0 :(得分:9)
按照Apple的说明,只需从模板创建一个CocoaTouch静态库项目:
确保在“复制文件”阶段之后放置了自定义“运行脚本”阶段:
然后,在构建时,成绩单将如下所示:
答案 1 :(得分:0)
在我的设置中,我有一个带有嵌套项目的父项目,该项目会发出一个静态库。
我尝试使用 Headers 阶段,我无法让Xcode在归档时将标题复制到正确的位置。此外,标题和静态库被复制到您不想要的存档中。所以我最终使用复制文件阶段并将跳过安装设置为YES,同时将父项目中的标题搜索路径指向BUILT_PRODUCTS_DIR。 / p>