Objective c 如何从命令行编译XCode 4.5项目

Objective c 如何从命令行编译XCode 4.5项目,objective-c,gcc,terminal,llvm,xcode4.5,Objective C,Gcc,Terminal,Llvm,Xcode4.5,我已经从XCode 4.5创建了简单的命令行应用程序,但是我需要从命令行编译它。如果我删除@autoreleasepool块和文字数组初始化,我可以使用以下命令编译它: gcc main.m -o prog -ObjC -framework Foundation 是否可以使用autoreleasepool和文字编译它 main.m(为了清晰起见,我删除了不相关的部分) #导入 int main(int argc,const char*argv[] { @自动释放池 { NSArray*数组=@

我已经从XCode 4.5创建了简单的命令行应用程序,但是我需要从命令行编译它。如果我删除
@autoreleasepool
块和文字数组初始化,我可以使用以下命令编译它:

gcc main.m -o prog -ObjC -framework Foundation
是否可以使用autoreleasepool和文字编译它

main.m(为了清晰起见,我删除了不相关的部分)

#导入
int main(int argc,const char*argv[]
{
@自动释放池
{
NSArray*数组=@[@“foo”,@“bar”];
NSLog(@“%@”,数组);
}
返回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

clang是Objective-C的首选编译器。新特性(自动释放作用域、ARC、文本等)不会添加到gcc中,它将在未来的Xcode版本中删除

命令行中的叮当声的用法与gcc非常相似,因此应该改为:

clang main.m -o prog -ObjC -framework Foundation

您需要安装Xcode命令行工具(Xcode菜单>打开开发者工具>更多开发者工具)。

clang是Objective-C的首选编译器。新功能(自动释放作用域、ARC、文本等)不会添加到gcc中,并且在未来的Xcode版本中将删除

命令行中的叮当声的用法与gcc非常相似,因此应该改为:

clang main.m -o prog -ObjC -framework Foundation

您需要安装Xcode命令行工具(Xcode菜单>打开开发人员工具>更多开发人员工具)。

如果您不介意使用
xcodebuild
为您构建它(而不是自己调用编译器),您可以这样做:

xcrun xcodebuild -project path/to/project.xcodeproj -target NameOfTarget -configuration Release
要将生成产品发送到指定的位置,可以将
'CONFIGURATION\u build\u DIR=path/To/build\u output\u directory'
添加到命令行参数中


请参阅
xcodebuild
帮助,了解调用它的其他方法。

如果您不介意让
xcodebuild
为您构建它(而不是自己调用编译器),您可以执行以下操作:

xcrun xcodebuild -project path/to/project.xcodeproj -target NameOfTarget -configuration Release
要将生成产品发送到指定的位置,可以将
'CONFIGURATION\u build\u DIR=path/To/build\u output\u directory'
添加到命令行参数中


请参阅
xcodebuild
帮助以了解调用它的其他方法。

我相信默认情况下编译器会使用ARC,因此当您放入
autoreleasepool
时,它会失败。您需要插入编译器标志,以表示您是在禁用ARC的情况下编译的。让我知道这是否对您有效,我将为其他用户发布正确的答案。我相信默认情况下编译器会使用ARC,因此当您放入
autoreleasepool
时,它会失败。您需要插入编译器标志,以表示您是在禁用ARC的情况下编译的。让我知道这是否对你有效,我会为其他用户发布一个正确的答案。