从XCode调用make时的PATH变量。
从XCode调用make时的PATH变量。
为了一个iPad应用程序,我需要在将它们与应用程序捆绑之前将一些CoffeeScript文件转换为JavaScript文件。
我尝试将以下代码添加到我的XCode项目的Makefile中:
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没有问题。然而,当我将Makefile作为XCode的目标添加后,我遇到了问题。
下面的错误是由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
命令?
问题出现的原因是在使用XCode调用make命令时,无法正确获取到环境变量(PATH变量)。解决方法是通过在命令行中启动XCode,并在启动脚本中引入.bash_profile文件来获取环境变量。
具体的解决方法如下:
1. 创建一个bash脚本,并将以下内容复制到脚本中:
source ~/.bash_profile # This is the trick that gets us our environment variables. open -a "Xcode"
此脚本中的`source ~/.bash_profile`命令用于获取环境变量。
2. 保存脚本,并将其命名为`xcode_launcher`(可以根据个人喜好进行命名)。
3. 创建一个Applescript应用程序,并将以下内容复制到应用程序中:
do shell script "~/xcode_launcher"
此脚本用于调用之前创建的bash脚本。
4. 保存Applescript应用程序,并将其命名为适合放置在Dock上的名称。
这样,通过点击Dock上的Applescript应用程序,就可以启动XCode,并正确获取到环境变量了。
参考链接:
https://stackoverflow.com/a/14285335/751061
当从XCode调用make命令时,出现了PATH变量的问题。问题的原因是通过Dock或Spotlight启动的程序没有执行.profile文件,因此$PATH没有正确设置。解决方法有两种。一种是在~/.MacOSX/environments.plist中设置$PATH。但是在生效之前需要重新启动。另一种方法是始终通过命令行启动XCode,使用open projectfile命令。需要注意的是,这里应该是~/.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。