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

在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

修改XCode的Product的输出目录(有时不生效需看)的更多相关文章

  1. CMD命令之 :修改windows的CMD窗口输出编码格式为UTF-8

    修改windows的CMD窗口输出编码格式为UTF-8 转载自 http://xuliduo.iteye.com/blog/639923 dos命令: chcp 65001  就是换成UTF-8代码页 ...

  2. node.js小工具--修改Xcode 'Create by'作者名称

    简介 用Xcode创建源文件时会自动在文件开始位置加入如下注释: // // ISSImageCycleScrollView.m // SoftTravel // // Created by iss1 ...

  3. VS生成项目时,有些文件无法复制到输出目录的解决办法

    有时候,我们在生成项目时,发现有些文件如:.jpg的图片文件,无法复制到输出目录中,此时会非常纠结,反复的清理项目,重新生成,依旧不能解决此问题.后来我打开.csproj的项目工程文件时,经过对比发现 ...

  4. 在 Visual Studio 生成项目时,会发现一些 dll 并没有被复制到输出目录,导致最终程序的执行错误

    发现与解决 检查了一下项目文件,发现是因为这些 dll 文件的引用其中一个叫做 嵌入互操作类型(EmbedInteropTypes)的属性被设为了 True,此时 复制本地 属性会被强制设为 Fals ...

  5. SpringBoot日志配置(详解) 涉及控制台输出日志、生成日志文件、日志级别修改、hibernate日志不输出

    写在前面 本篇主要讲述日志配置,看完本篇可以解决下述问题, 控制台输出日志.生成日志文件.日志级别修改.hibernate日志不输出 Git Demo Path:https://github.com/ ...

  6. gradle + mybatis 复制xml等配置文件到输出目录

    问题 部署项目并启动项目后,使用mybatis时候,报一个错误:org.apache.ibatis.binding.BindingException: Invalid bound statement ...

  7. qt creator设置默认输出目录

    note creator version : 4.13.1 敲黑板,一定要先配置好 Qt creator的default build directory , 再创建项目,最后再编译 敲黑板,一定要先配 ...

  8. 【Tip】如何让引用的dll随附的xml注释文档、pdb调试库等文件不出现在项目输出目录中

    项目输出目录(bin/debug|release)中经常是这个样子: main.exemain.pdb a.dll a.xml b.dll b.pdb b.xml ... 其中xml是同名dll的注释 ...

  9. HDInsight 指定输出目录 insert overwrite

    基本语法 insert overwrite local directory '/example/demo/' select * from table; 可以格式化输出 insert overwrite ...

随机推荐

  1. 开源项目在真机调试(Coding iOS 客户端为例)

    一.前言 iOS 13学习系列:如何在github下载开源项目到本地(Coding iOS 客户端为例)已经把 Coding iOS 客户端源码下载到本地. 但项目进行真机调试遇到很多问题. 二.问题 ...

  2. session超时时间设置方法

    session超时时间设置方法 由于session值之前没有设置,以至于刚登录的网站,不到一分钟就超时了,总结了一下,原来是session过期的原因,以下是设置session时间的3个方法: 1. 在 ...

  3. 怎么在myeclipse中导入已经写好的项目

    经常我们需要学习别人写好了的源码来提升自己的编码能力,本文将介绍如何从外部导入别人已经写好的项目到我们myeclipse里面.同时也将介绍怎么给导入的工程改名的问题.                 ...

  4. 二、CoreAnimation之寄宿图详解

    在之前的图层树中我们知道,可以使用CALayer对象创建一些有背景颜色的图层,其实使用CALayer,不仅可以利用其展示背景颜色,还可以展示图片.而这些展示内容,其实就是CALayer的寄宿图.这一节 ...

  5. 原生js完成拼图小游戏

    废话不说,看代码,图片可以自己找,我这直接引用了百度的了 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml ...

  6. python常见数据类型

    字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串烦人过程其实很简单,只需为变量分配一个值即可.例如: var = 'Hello Wor ...

  7. Delphi:与VCL同步(Synchronize()、用消息来同步)

    看本文时,可以同时参考:Delphi中线程类 TThread实现多线程编程(事件.临界区.Synchronize.WaitFor……) 先说一下RTL和VCL RTL(Run-Time library ...

  8. 【CentOS】文件与目录管理

    一.文件与目录管理 0.cd--change directory cd -  返回上次的目录 cd ~ 返回到家目录 --对于root用户来说是/root,对于普通用户来说是/home/用户名 cd ...

  9. 【Exception—WebForm】当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。

    最近做的项目现在发布到服务器上开始测试了,本地好好的程序,到服务器上却报异常了: 当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作.请指定 ServiceNo ...

  10. 纯CSS实现二级下拉导航菜单

    这是一款纯CSS菜单,二级下拉导航效果,是最简洁的CSS导航菜单,兼容性也很棒,IE7/8.火狐等都支持,而且它还是学习CSS菜单编写的典型教程,让你学会很多CSS技巧. 运行效果截图如下: < ...