【问题标题】:PATH variable when calling make from XCode从 XCode 调用 make 时的 PATH 变量
【发布时间】:2012-06-19 18:42:48
【问题描述】:

对于 iPad 应用程序,我需要将一些 CoffeeScript 文件转换为 JavaScript 文件,然后再将它们与应用程序捆绑在一起。

我尝试使用以下代码将 Makefile 添加到我的 XCode 项目中:

MANUAL_ROOT=IOS12BSH/manual
SCRIPTS_ROOT=$(MANUAL_ROOT)/scripts

COFFEE_SOURCES=$(SCRIPTS_ROOT)/*.coffee $(SCRIPTS_ROOT)/guides/*.coffee
JAVASCRIPT_TARGETS=$(COFFEE_SOURCES:.coffee=.js)

all: build

build: coffeescript

clean: clean_coffeescript

coffeescript: $(JAVASCRIPT_TARGETS)

clean_coffeescript:
    rm -f $(JAVASCRIPT_TARGETS)

$(JAVASCRIPT_TARGETS): $(COFFEE_SOURCES)
    coffee -c $(COFFEE_SOURCES)

从 shell 运行这个 Makefile 没有问题。但是,在 XCode 中添加 Makefile 作为目标后,我遇到了问题。

Makefile 产生了以下错误:

coffee -c IOS12BSH/manual/scripts/*.coffee IOS12BSH/manual/scripts/guides/*.coffee
/bin/sh: coffee: command not found
make: *** [IOS12BSH/manual/scripts/*.js] Error 127
Command /Applications/Xcode.app/Contents/Developer/usr/bin/make failed with exit code 2

这很奇怪,因为我的机器上安装了coffee 命令(它安装在/opt/local/bin/coffee 下并且/opt/local/bin 添加到我的$PATH 中的~/.profile)。

所以我在 Makefile 中添加了一个echo $(PATH),当 Makefile 由 XCode 执行时,$PATH 似乎不同。 XCode 似乎没有从~/.profile 读取设置,因此/opt/local/bin 不在$PATH 中。

这是什么原因,我该如何解决这个问题,以便找到coffee 命令?

【问题讨论】:

  • 为什么不在你的makefile中修改你的“$PATH”来添加“/opt/local/bin”呢?你是如何在 Xcode 中运行你的 makefile 的?是否处于“运行脚本”构建阶段?
  • 我无法在 Makefile 中更改它,因为 Makefile 在共享存储库中。其他开发人员可能已经在其他地方安装了他们的coffee 命令。
  • 我没有使用Makefile 的经验,但你不能source ~/.profile 吗?

标签: xcode makefile environment-variables


【解决方案1】:

嗯,通过 Dock 或 Spotlight 启动的程序似乎没有执行 .profile,因此 $PATH 设置不正确。

所以一种方法是在~/.MacOSX/environments.plist 中设置$PATH。这显然可以工作,但您需要重新启动才能工作。

另一种方法是始终从命令行使用 open projectfile 启动 XCode。

【讨论】:

  • 应该是~/.MacOSX/environment.plist,而不是复数environments.plist。 :)
  • 这里有什么聪明的方法来设置这个路径来自~/.profile吗?
  • 嗯,我刚刚检查了一下,实际上我已经在那个 plist 文件中有/opt/local/bin ..(OS 10.8;XCode 4.6.3)。但它似乎仍然无法找到该文件。在像OP建议的那样实际打印出Makefile中的路径后,我发现这个路径实际上与~/.MacOSX/environment.plist中的路径有很大不同,它不包括/opt/local/bin
【解决方案2】:

这个答案详细解释了这个问题: https://stackoverflow.com/a/14285335/751061

最终对我来说效果最好的就是从命令行启动 Xcode。 我编写了一个简单的 bash 脚本,如下所示:

source ~/.bash_profile  # This is the trick that gets us our environment variables.
open -a "Xcode"

然后我从 Applescript 应用程序中调用它,只是为了给它一个我可以放在 Dock 上的包:

do shell script "~/xcode_launcher"

在 bash 脚本中获取您的配置文件是必要的,因为从 Applescript 运行脚本永远不会从配置文件中获取,因此您仍然没有默认环境变量。

【讨论】:

    【解决方案3】:

    ant 命令相同。它适用于终端,而不是 Xcode 必须这样做。让它工作的唯一方法:终端中的sudo open project.xcodeproj

    【讨论】:

      猜你喜欢
      • 2017-12-01
      • 2019-06-30
      • 1970-01-01
      • 2019-09-22
      • 2017-01-09
      • 2017-09-28
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多