【问题标题】:Compile Objective-C with ubuntu's makefile使用 ubuntu 的 makefile 编译 Objective-C
【发布时间】:2014-10-21 17:43:21
【问题描述】:

我正在尝试制作一个可以在 Linux 中编译我的 Objective-C 项目的 Makefile(在 Koding 上运行的 ubuntu 14.04)。

我在 bash 中用来编译的命令是:

gcc $(gnustep-config --objc-flags) main.m $(gnustep-config --base-libs) -o ./bin/main

所以我尝试了一些简单的东西,例如:

FLAGS=$(gnustep-config --objc-flags)
LIBS=$(gnustep-config --base-libs)

all:
    gcc $(FLAGS) main.m $(LIBS) -o ./bin/main

但是当我运行makefile时它说:

gcc main.m -o ./bin/main main.m:1:34: 致命错误: Foundation/Foundation.h:没有这样的文件或目录#import ^ 编译终止。 make: *** [all] 错误 1

Y 还尝试将变量 FLAGS 和 LIBS 替换为运行特定命令的控制台输出,例如:

FLAGS=-MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNU_RUNTIME=1 -DGNUSTEP_BASE_LIBRARY=1 -fno-strict-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -pthread -fPIC -Wall -DGSWARN -DGSDIAGNOSE -Wno-import -g -O2 -fgnu-runtime -fconstant-string-class=NSConstantString -fexec-charset=UTF-8 -I. -I/home/mjdegue/GNUstep/Library/Headers -I/usr/local/include/GNUstep -I/usr/include/GNUstep

但在这种情况下,我会得到如下输出:

gcc -MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNU_RUNTIME=1 -DGNUSTEP_BASE_LIBRARY=1 -fno-stri
ct-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -pthread -fPIC -Wall -DGSWARN -DGSDIAGNOSE -Wno-i
mport -g -O2 -fgnu-runtime -fconstant-string-class=NSConstantString -fexec-charset=UTF-8 -I. -I/home/mjdegue/GNUstep/L
ibrary/Headers -I/usr/local/include/GNUstep -I/usr/include/GNUstep main.m -rdynamic -pthread -shared-libgcc -fexceptio
ns -fgnu-runtime -L/home/mjdegue/GNUstep/Library/Libraries -L/usr/local/lib -L/usr/lib -lgnustep-base -lobjc -lm -o ./
bin/main
gcc: error: unrecognized command line option '-MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNU_RU
NTIME=1 -DGNUSTEP_BASE_LIBRARY=1 -fno-strict-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -pthrea
d -fPIC -Wall -DGSWARN -DGSDIAGNOSE -Wno-import -g -O2 -fgnu-runtime -fconstant-string-class=NSConstantString -fexec-c
harset=UTF-8 -I. -I/home/mjdegue/GNUstep/Library/Headers -I/usr/local/include/GNUstep -I/usr/include/GNUstep'
make: *** [all] Error 1

问题是:

是否有对变量 $(gnustep-config --objc-flags) 和 $(gnustep-config --base-libs) 的引用,它们包含在 FLAGS / LIBS 中?

如果不是:我怎样才能做到这一点?

非常感谢大家。

【问题讨论】:

  • 为什么不用gnustep make package?

标签: objective-c


【解决方案1】:

我认为变量不能从 shell 输出中设置。

试试:

FLAGS = $(shell gnustep-config --objc-flags)
LIBS = $(shell gnustep-config --base-libs)

all:
    gcc $(FLAGS) main.m $(LIBS) -o ./bin/main

或者,这个语法:

FLAGS = `gnustep-config --objc-flags`
LIBS = `gnustep-config --base-libs`

all:
    gcc $(FLAGS) main.m $(LIBS) -o ./bin/main

或者,您可以存储命令,并就地执行它们:

FLAGS = gnustep-config --objc-flags
LIBS = gnustep-config --base-libs

all:
    gcc `$(FLAGS)` main.m `$(LIBS)` -o ./bin/main

【讨论】:

  • 太棒了。我使用了第一种方式,效果很好。我还没有尝试过其他的。非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多