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

Dis*_*ser 7 c objective-c clang

希望简单的问题.我正在尝试从命令行学习基本的Objective-C编译,使用clang.据我所知,Xcode是对于复杂的项目更好的解决方案,我打算尽快移动到它,但我个人觉得我理解的语言更好,如果我能在终端手动编译它,并为小型编程入门项目,我觉得少在终端编译比在必须开始新项目时更麻烦.

所以,问题是:我怎么编译包含多个文件(命令行)一个Objective-C程序?(我试图从科昌的教材第七章做了部分程序,用的main.m和Fraction.m文件,这两个#进口"Fraction.h",而进口基础框架Fraction.h文件.)要编译单个文件,我使用类似的东西

clang -fobjc-arc main.m -o prog1
Run Code Online (Sandbox Code Playgroud)

但是如果我键入它并且我想在项目中包含除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)
Run Code Online (Sandbox Code Playgroud)

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

clang -fobjc-arc main.m Fraction.h Fraction.m -o prog1
Run Code Online (Sandbox Code Playgroud)

然后我明白了

clang: error: cannot specify -o when generating multiple output files
Run Code Online (Sandbox Code Playgroud)

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

clang -fobjc-arc main.m Fraction.h Fraction.m
Run Code Online (Sandbox Code Playgroud)

然后我得到了一大堆错误,都指的是基础框架,最终以"致命错误:发出太多错误,现在停止"结束.

我该怎么做才能使它工作?或者,只要涉及多个文件,我是否需要将其吸收并使用Xcode?

Mar*_*n R 7

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

clang -fobjc-arc main.m Fraction.m -o prog1
Run Code Online (Sandbox Code Playgroud)

奇怪的错误消息"生成多个输出文件"可能是因为clang还可以将头文件编译为"预编译头文件".