如何编译和运行通过终端使用多个文件的程序?

时间:2015-03-13 06:09:57

标签: c++ terminal

所以我正在尝试练习并学习如何使用文本编辑器和命令行界面(mac上的终端),但是我在编译时遇到了麻烦。我用c ++编写,我将主文件,类和类定义分成多个文件。我想使用终端编译和运行程序但是遇到了问题。我用

 g++ file1.cpp file2.cpp file3.h -o run 

编译并收到错误消息“生成多个输出文件时无法指定-o”。

我打算在这个程序中有更多的文件,不知道这是否是每次编译的最佳方式?无论如何,我如何编译这个程序,以便我可以运行?我知道程序没有任何错误,因为我在IDE Xcode中进行了测试。

1 个答案:

答案 0 :(得分:1)

如果你真的想要,你可以输入几个命令(-std=c++11告诉编译器它是C++11代码,-Wall询问几乎所有警告,-Wextra要求其中更多,-g请求调试信息,-c避免链接步骤)

 g++ -std=c++11 -Wall -Wextra -g -c file1.cpp
 g++ -std=c++11 -Wall -Wextra -g -c file2.cpp
 g++ -std=c++11 -Wall -Wextra -g -c file3.cpp

这些命令正在生成目标文件file1.ofile2.ofile3.o,您可以将其链接以生成可执行文件:

 g++ -std=c++11 -g file1.o file2.o file3.o -o run
顺便说一句,你可以在一个命令中运行所有内容:

 g++ -std=c++11 -Wall -Wextra -g file1.cpp file2.cpp file3.cpp -o run

但这不是最佳的(因为通常一次编辑一个文件,而其他文件可能不需要重新编译)。

但您真的想要使用GNU make ,写下Makefile(请参阅this example)并简单地使用make进行编译;如果您只更改file2.cpp,那么make会注意到只有file2.o必须重新生成(并且最后一个链接要再次生成run

您不需要编译头文件(它们由g++编译器预处理)。您可能对precompiled headers和makefile依赖generation感兴趣。

调试程序后(在gdbvalgrind等调试器的帮助下),您可以通过替换{{{}来要求编译器执行optimizations 1}} -g-O(您甚至可以使用-O2进行编译)。如果您对程序进行基准测试(例如使用-g -O),请不要忘记要求编译器进行优化!

PS。您的time命令可能需要more arguments,例如g++ ...添加一个包含目录,-I来定义预处理器名称,-DNAME ...添加一个库目录,-L ...来链接一个库和参数顺序对-l

很重要