我已经从XCode 4.5创建了简单的命令行应用程序,但是我需要从命令行编译它。如果我删除@autoreleasepool
块和文字数组初始化,我可以使用以下命令编译它:
gcc main.m -o prog -ObjC -framework Foundation
是否可以使用 autoreleasepool和literals编译?
main.m (为清楚起见,我删除了不相关的部分)
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool
{
NSArray *array = @[@"foo", @"bar"];
NSLog(@"%@", array);
}
return 0;
}
输出:
> gcc main.m -o prog -ObjC -framework Foundation
main.m: In function ‘main’:
main.m:6: error: stray ‘@’ in program
main.m:6: error: ‘autoreleasepool’ undeclared (first use in this function)
main.m:6: error: (Each undeclared identifier is reported only once
main.m:6: error: for each function it appears in.)
main.m:7: error: expected ‘;’ before ‘{’ token
main.m:8: error: stray ‘@’ in program
答案 0 :(得分:3)
如果你不介意让xcodebuild
为你构建它(而不是自己调用编译器),你可以这样做:
xcrun xcodebuild -project path/to/project.xcodeproj -target NameOfTarget -configuration Release
要将构建产品发送到您指定的位置,可以将'CONFIGURATION_BUILD_DIR=path/to/build_output_directory'
添加到命令行参数。
有关调用它的其他方法,请参阅xcodebuild
帮助。
答案 1 :(得分:2)
clang是Objective-C的首选编译器。新功能(自动释放范围,ARC,文字等)未添加到gcc中,并且将在未来的Xcode版本中删除。
命令行中clang的使用与gcc非常相似,所以这应该起作用:
clang main.m -o prog -ObjC -framework Foundation
您需要安装Xcode命令行工具(Xcode菜单&gt; Open Developer Tool&gt;更多开发人员工具)。