xcode 5 workspace 与 static lib 工程的联合使用

1.新建一个WorkSpace:MyWorkSpace保存到MyWorkSpace文件夹下

2.在此工作空间下新建一个项目:在project navigator 右键菜单 New Project:MyProj

4.在项目MyProj下新建一个静态库:在project navigator 右键菜单 New Project-》Framework & Library > Cocoa Touch Static Library:MyStaticLib1 (建立时选择Add to:MyWorkSpace Group:MyProj)

3.在此工作空间下新建一个静态库:在project navigator 右键菜单 New Project-》Framework & Library > Cocoa Touch Static Library:MyStaticLib2(建立时选择Add to:MyWorkSpace Group:MyWorkSpace)

(注意:MyStaticLib1是建立在MyProj下,而MyStaticLib2是建立在MyWorkSpace 下)

xcode下的目录结构是:

-MyProj

    -MyStaticLib1

        -MyStaticLib1

        -MyStaticLib1Tests

        -Frameworks

        -Products

    -MyProj

    -MyProjTests

    -Frameworks

    -Products

-MyStaticLib2

    -MyStaticLib2

    -MyStaticLib2Tests

    -Frameworks

    -Products

此时文件系统下的目录结构是:

-MyWorkSpace

     -MyProj

         -MyStaticLib1

     -MyStaticLib2

     -MyWorkSpace.xcworkspace

4.为项目添加静态库:

选中MyProj,打开 Build Phases配置选项 然后展开 Link Binary With Libraries ,点击 + 会看到 Workspace > MyStaticLib1.a,MyStaticLib2,添加这两个.a库

5.设置头文件搜索目录:

选中MyProj,打开 Build Settings配置选项 ,找到Search Paths 下的User Header Search ,点击 + 会添加$(BUILT_PRODUCTS_DIR)/include/MyStaticLib1                      recursive

$(BUILT_PRODUCTS_DIR)/include/MyStaticLib2                      recursive

这里需要补充一下的是为什么这个路径?

打开organizer 选中工作空间MyWorkSpace点击Derived Data进入到编译的文件夹可以发现文件结构:

-MyWorkSpace-hh..................

    -scm.plish

    -Logs

    -build

         -Products

               -Debug-iphonesimulator

                      -libStaticLib1.a

                      -MyProj.app.dSYM

                      -MyProj.app

                      -inculude

                             -MyStaticLib1

                                    MyStaticLib1.h

                             -MyStaticLib2

                                    MyStaticLib2.h

...............................................................

$(BUILT_PRODUCTS_DIR):编译后的产品路径

头文件搜索路径也可以设置为$(BUILT_PRODUCTS_DIR)/include/                     recursive

non-recursive:只搜索此文件夹下的文件

recursive:递归搜索此文件夹下的文件,即不但搜索此文件夹,还搜索子文件夹

6.在静态库里每次新建一个.h  .m文件都要设置为公开,这样项目才可以在第5步的include/staticLib下发现这个头文件

选中静态库项目staticLib,  Build Phases->Copy Files 点击+选中新建的 .h文件

7.如果在静态库中新建了类目文件,还得设置项目的Other Linker Flags 中-ObjC

8.也可以将MyStaticLib2 的Build Settings的Per-configuration Build Products Path设置成$PROJECT_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME),这样MyStaticLib2编译后的.a库就放在$PROJECT_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)路径下,然后在MyProj的Build Settings的Other Linker Flags 添加-force_load $(SRCROOT)/MyStaticLib1/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/libMyStaticLib1.a,这样就不用在MyProj里添加MyStaticLib1的静态库了,这样就可以加载是真机还是模拟器的.a库了

Build Phases 下的Target Dependencies只是说在编译项目之前先编译哪些库

相关推荐