0

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

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

是否可以使用autoreleasepool 和文字编译它?

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
4

2 回答 2

3

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

xcrun xcodebuild -project path/to/project.xcodeproj -target NameOfTarget -configuration Release

要将构建产品发送到您指定的位置,您可以添加'CONFIGURATION_BUILD_DIR=path/to/build_output_directory'到命令行参数。

xcodebuild有关调用它的替代方法,请参阅帮助。

于 2012-11-27T19:57:58.297 回答
2

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

从命令行使用 clang 与 gcc 非常相似,因此应该改为:

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

您需要安装 Xcode 命令行工具(Xcode menu > Open Developer Tool > More Developer Tools)。

于 2012-11-27T19:53:24.447 回答