objective-c - 使用 clang 在命令行上编译多个 Objective-C 文件

标签 objective-c c clang

希望是简单的问题。我正在尝试使用 clang 从命令行学习基本的 Objective-C 编译。我知道 Xcode 是复杂项目的更好解决方案,我计划很快转向它,但我个人觉得如果我可以在终端中手动编译它,我会更好地理解一门语言,而对于小型介绍性编程项目,我发现它更少在终端中编译比必须开始一个新项目更麻烦。

所以问题是:如何编译包含多个文件的 Objective-C 程序(从命令行)? (我正在尝试使用 Kochan 教科书第 7 章中的分数程序,其中包含 #import“Fraction.h”的 main.m 和 Fraction.m 文件,以及导入 Foundation 框架的 Fraction.h 文件。)为了编译单个文件,我使用类似的东西

clang -fobjc-arc main.m -o prog1

但是如果我键入它并且我想在项目中包含 main.m 以外的文件,我会收到错误,包括:

ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

如果我尝试将附加文件作为参数添加到命令中,例如

clang -fobjc-arc main.m Fraction.h Fraction.m -o prog1

然后我得到

clang: error: cannot specify -o when generating multiple output files

如果我然后像这样删除 -o 参数

clang -fobjc-arc main.m Fraction.h Fraction.m

然后我收到一大堆错误,所有错误都与基础框架有关,最终以“ fatal error :发出的错误太多,现在停止”结束。

我如何做到这一点并使其发挥作用?或者,我是否需要在涉及多个文件时立即接受它并使用 Xcode?

最佳答案

只编译实现文件 (*.m),不编译接口(interface)/包含文件,所以这应该可以工作:

clang -fobjc-arc main.m Fraction.m -o prog1

“生成多个输出文件”这个奇怪的错误信息大概是由于 clang 还可以将头文件编译为“预编译头文件”。

关于objective-c - 使用 clang 在命令行上编译多个 Objective-C 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16446813/

相关文章:

c - 堆栈大小会在运行时增长吗?

c - Sublime 文本识别扩展多行的功能

c++ - 无法通过 Clang API 找到标识符,但 Clang 在使用时可以找到它

objective-c 头文件中的 C++ 类声明

c - 如何使用标准 C/C++ "UNIX timers"为滑动窗口数据传输协议(protocol)创建一系列数据包超时处理程序

c - 等同于其他编译器中 MSVC 的 _countof?

c - 为什么 gcc 和 clang 不警告写入地址 0?

iphone - iOS:在 iOS 中处理数据库的最佳方式是什么?

ios - 如何使用类转储获取 IOHIDLib 的 header ?

iphone - 发送到释放的实例