如何更改目标的输出目录

67

我正在使用一个工作空间,其中有一个主要的应用程序项目和一个静态库项目,主要应用程序使用该静态库。我希望静态库项目将libX.a生成到主应用程序项目目录中,因为我想将这个libX.a推送到我的Git仓库中。

更改静态库项目的构建路径设置应该推送到自己的Git仓库中,以便其他人不必一次又一次地处理这个更改。

我尝试将静态库目标的“构建产品路径”更改为“$(SRCROOT)/../SharedData”,但没有任何效果。

谢谢!

8个回答

51
  1. 转到文件 -> 项目设置。

  2. 在派生数据位置下点击高级按钮。在生成位置中选择自定义并选择您的输出目录。这将更改变量$(BUILD_DIR)为您在该字段中设置的任何内容。

  3. 单击完成,然后转到您的目标设置。在生成位置下,现在可以根据$(BUILD_DIR)宏指定目标的输出位置。


10
这似乎是一个 XCode 的设置,而不是你可以在任何版本控制系统中检查的内容。 - noobular
如果我的项目是A,我想要将可执行文件放在A/release目录下,但似乎这种方法行不通;我只能将其放在A/release/Release目录下。有什么线索吗? - Jorge Leitao
将项目迁移到xCode 12时出现了编写清单的问题。转到项目设置,将共享项目设置更改为新的构建系统,并在每个用户的项目设置中将派生日期更改为自定义位置,最终将构建位置更改为新的默认位置。 - Jim Geldermann
1
警告:如果您清理项目,Xcode将删除目标文件夹中包含的所有内容!(不仅限于Debug或Release文件夹。) - idbrii
XCode 12仍然存在同样的问题,即“项目设置”未反映在项目配置文件中,也无法提交到Git。 - Paul Slocum

39

更新Xcode 5到6.3的说明。

  1. 转到 文件(File) -> 项目设置(Project settings)
  2. 单击 高级(Advanced) 按钮
  3. 单击 完成(Done),然后再次单击 完成(Done)

完成!


6
对于大型项目,这种配置不可行,因为该配置保存在特定用户的xcuserdatad文件夹中。 - Pavel P
5
工作空间设置的更改在 Git 中未显示。 - hariszaman

34

这是一个您可以存入源代码控制的解决方案,并我已经验证它可以在Xcode 6.2上运行。

  1. 向您的项目添加.xcconfig文件——有关详细信息,请参见此SO问题
  2. 在.xcconfig文件中,指定Xcode标准环境变量PROJECT_TEMP_DIR、CONFIGURATION_BUILD_DIR和BUILT_PRODUCTS_DIR,使其指向您想要的文件位置。

阅读苹果公司的xcconfig格式参考文献,似乎仅覆盖OBJROOT和SYMROOT在.xcconfig文件中就可以完成此操作——但在我的Xcode 6.2测试中,更改它们没有任何效果。必须更改上面列出的那三个特定环境变量。

以下是我在Xcode 6.2 .xcconfig文件中的设置,以便中间文件和可执行文件进入它们的“传统”位置:

// Intermediate build files go here
PROJECT_TEMP_DIR = $(SRCROOT)/build/$(PROJECT_NAME).build

// Build-related files for the active build configuration go here
CONFIGURATION_BUILD_DIR = $(SRCROOT)/build/$CONFIGURATION

// The final product executables and other build products go here
BUILT_PRODUCTS_DIR = $(SRCROOT)/build/$CONFIGURATION
不要忘记将xcconfig文件添加到“部署目标” - >“配置”中,以使其起作用(单击项目,在“信息”下,在“部署目标”部分下的“配置”中)

1
顺便提一下,我相信这是XCode中的一个错误,即在考虑项目文件设置之前就已经评估了OBJROOT和SYMROOT。链接 - Pavel P
这导致我使用 SPM 依赖项的项目链接失败。相反,指定安装位置对我有用,参见 我的回答 - YourMJK

12

根据 @gp-coder 的说法,对于 xcode 9.* 版本的情况,将按照图片中给出的步骤进行操作。

输入图片说明 输入图片说明输入图片说明

然后点击“完成”按钮即可。

就这样,谢谢。


或者您可以选择Legacy,然后通过设置Build Products Path(在您自己的目标的构建设置中)相对于您的项目目录来指定每个目标的设置。 - ideawu
非常感谢!这正是我在寻找的。 - kodartcha

5

另一种方法是在您的目标的构建设置中编辑生成位置>每个配置生成产品路径enter image description here


1
耶!寻找底部简短答案的规则再次帮助了我!谢谢! :) - mlvljr
1
没有这样的设置。 - user187676

4

如果你想修改项目的构建路径,可以按照以下步骤进行更改。

1)选择Xcode >首选项,并单击位置。

2)单击衍生数据设置的高级按钮。

3)从可用选项中选择一个构建位置,然后单击“完成”。

例如,如果你在构建位置选项中选择“自定义”,则你的构建将生成在“/Users/XYZ/Desktop/Build/Products”位置。


5
这会改变所有项目的构建路径。 - Iulian Onofrei

2
在Xcode 8.x中,我使用一个.sh文件的命令行选项设置了derivedData目录,该文件用于构建项目。开发人员可以将构建结果放在他们的用户目录下(默认Xcode首选项),而官方构建则会在传统区域创建构建结果:
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
xcodebuild -workspace 'my project.xcworkspace' -scheme 'my project' -configuration Release -derivedDataPath '$SCRIPT_DIR/build'

这是我在 Azure DevOps 管道上使用的方法。 - Fede E.

0

大多数在此更改构建位置的答案在构建 macOS 命令行工具与 SPM 依赖项时对我无效。构建失败是因为 Xcode 在错误的位置查找库文件。
在 @Bob Murphy 的答案基础上,您可以在 .xcconfig 文件中指定一个安装位置,在成功构建后将产品复制到该位置。

  1. 将 .xcconfig 文件添加到目标的“发布”配置中(相关 SO 问题
  2. 配置文件:添加 DEPLOYMENT_LOCATION = YES 并通过 DSTROOTINSTALL_PATH 指定安装位置。

INSTALL_PATH 相对于 DSTROOT,因此产品将被复制到 $DSTROOT/$INSTALL_PATH
示例 .xcconfig 文件:

DEPLOYMENT_LOCATION = YES
INSTALL_PATH = .
DSTROOT = $(SRCROOT)/build/

如果已经在其他地方指定了,您可能需要添加SKIP_INSTALL = NO
选择性地添加DEPLOYMENT_POSTPROCESSING = YES也可以通过剥离符号来减小二进制文件的大小。

请注意,理论上应该可以通过覆盖TARGET_BUILD_DIR直接指定目录,而不是设置DSTROOTINSTALL_PATH,但在我的Xcode 13中由于某种原因无法工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接