• 修改XCode的Product的输出目录(有时不生效需看)


    通常在情一般都不建议使用绝对路径,因为写死之后,换环境,换平台,又要重新修改路径,因此常常使用相对路径,哪么相对路径通常使用的就是环境变量了。

    在Mac 中,xcode 中build settings里面就有好多环境变量。

    下面主要是以xcode 4.2 --sdk 5.0 进行说明,因为不同的环境build settings不一样,但差别不大。

    xcode 的build settings配置项有几种设置

    1、使用.xcconfig的方式进行配置

    2、系统自荐的方式

    3、自定义的方式

    默认情况下,创建工程都是以自荐的方式,即默认已经设置好这些配置了。

    哪怎么设置自定义方式呢?

    xcode->Preferences->locations->advanced(高级)然后在下拉列表中选择。

    Derived Data Location (Recommended)   ---系统自荐目录

    Locations Specified by Targets                   ---使用targets文件进行设置,即我们每次建项目的时候都会产生一个targets,通过targets中的选项进行设定输出路径。

    因为构选输出目录跟这个设置有关,所以先介绍这个设置。

    实例来说明其中的作用:

    1、选创建一个演示项目。如图:

    存放目录为/Users/ffsh/Desktop/CProjectSet,其中ffsh为登录的用户名。

    2、当xcode->Preferences->locations->advanced 中选择为Derived Data Location (Recommended) 时:

    Derived data有三种选择如图:

    a、当选择为default时,Derived Data的目录为  /Users/xxx/Library/Developer/Xcode/DerivedData

    b、当选择为Relative时,Derived Data的目当为 当前.xcodeproj所在的目录。见图:

    c、当选择为custom,即自定义,为了查看是否输出到自定义,我在Desktop下建了一个custom文件夹,然后设置Custom的输出路径为:/Users/ffsh/Desktop/Custom

    同样可以把原来Derived Data下的东东全部输出到了custom。

    上面是自荐的方式。

    当xcode->Preferences->locations->advanced 中选择为Locations Specified by Targets时:

    先来设置一下Build Products Path 中的值(默认为Build),这里取为myBuild.

    然后分别将Derived Data设为:

    a、default时,产生的mybuild 目录在.xcodeproj目录。

    可以看到原来Derived Data目录下不现产生Build的文件夹了,些文件夹被放到了.xcodeproj目录。

                   

    b、Relative时,mybuild目录不变,但Derived Data目录放到了xcodeproj目录了。

    c、custom时,把Derived data下的内容放到了custom目录。

    如果Build Products Path 中的值为mybuild,但还是自荐方式的话,此时mybuild是不起作用的。

    事实上,从上面大家可以知道,build出来的内容包括两个,一个是正式的,一个是临时的。可以在自荐的放式下看到

    Build下有四个文件夹分别为:

    filemaps

    intermediates                      --编译中间产生的文件(temp)

    precompileheaders

    products  --编译最终产生的文件。

    设置Build Products Path路径,其实是把products中的内容放到这个路径下。

    设置Intermediates Build files path ,其实是把intermediates中的内容放到这个目录下。

    Build Locations中的4个设置项的值:

    默认情况下的

    以下用$(default) 代替 /Users/xxx/Library/Developer/Xcode/DerivedData/CProjectSet-erpfssifqoxezbcceyoqjoclrfds 

    $(SYMROOT)  = $(default)/Build            -- 对应于Build Products Path设置,如果为自荐方式,这个值填了无效果,如果为使用targets配置方式这里填的才起效果

    $(SYMROOT)/intermediates    ----中间构建文件存放路径,其中在Intermediates Build files path中只需要设为$(SYMROOT)即可,intermediates系统自动生成。 

    $(BUILD_DIR) = $(SYMROOT)/products

    $(BUILD_ROOT) = $(BUILD_DIR) 

    $(CONFIGURATION)  当项目Build时选译Build configuration为Debug时值为Debug,当选为Release时,值为Release

    $(EFFECTIVE_PLATFORM_NAME)   当模似器时为值为-iphonesimulator 当为真机时为-iphoneos

    $(PROJECT_TEMP_DIR)   =  $(SYMROOT)/intermediates/xxxx.build       基中xxxx表过项目名称

    $(CONFIGURATION_BUILD_DIR)   =  $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)       ---- (Per-Configuration Build Products Path)

    $(CONFIGURATION_TEMP_DIR)   =    $(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)     --(Per-Configuration Intermediate File Path)

    自定义的情况下:

    $(SYMROOT)  = $(SRCROOT)/abc            --- 其中abc为自己在Build Products Path中设置的值

    $(BUILD_DIR) = $(SYMROOT)

    $(BUILD_ROOT) = $(BUILD_DIR)

     $(PROJECT_TEMP_DIR)   =  $(SYMROOT)/xxxx.build

    通过自定义可以自行设定构建目录,便于管理。

    iphoneos5.0下的编译脚本:

    xcodebuild -project "UtilLib.xcodeproj" -configuration "Debug" -target "UtilLib" -sdk "iphoneos5.0" -arch "armv6 armv7" build RUN_CLANG_STATIC_ANALYZER=NO  $(BUILD_DIR)="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

     

    iphonesimulator5.0下的编译脚本:

    xcodebuild -project "UtilLib.xcodeproj" -configuration "Debug" -target "UtilLib" -sdk "iphonesimulator5.0" -arch "i386" build RUN_CLANG_STATIC_ANALYZER=NO $(BUILD_DIR)="${BUILD_DIR}"  BUILD_ROOT="${BUILD_ROOT}"

    加上下面一句表示输出到文件:

    > "${BUILD_ROOT}.build_output"

     

    lipo脚本工具:合并iPhone模拟器和真机的静态类库,生成通用库

    lipo -create -output "${CREATING_UNIVERSAL_DIR}/${EXECUTABLE_NAME}" "${CURRENTCONFIG_DEVICE_DIR}/${EXECUTABLE_NAME}"         "${CURRENTCONFIG_SIMULATOR_DIR}/${EXECUTABLE_NAME}"

    意思是:把"${CURRENTCONFIG_DEVICE_DIR}目录下的.a文件,和${CURRENTCONFIG_SIMULATOR_DIR}目录下的.a文件合并,

    在${CREATING_UNIVERSAL_DIR}目录下,生成两个设备都通用的静态库,

    例如:lipo -create -output xy.a x.a y.a

  • 相关阅读:
    ytu 2030: 求实数绝对值(水题)
    [PHP] 链表数据结构(单链表)
    PHP将数据写入指定文件中
    PHP获取文件后缀名
    PHP数组序列化和反序列化
    PHP二维数组(或任意维数组)转换成一维数组的方法汇总
    PHP获取文件大小的方法详解
    PHP中嵌套函数被调用时出现报错的问题
    PHP递归排序
    PHP实现简单倒计时
  • 原文地址:https://www.cnblogs.com/cy568searchx/p/5889002.html
Copyright © 2020-2023  润新知