【问题标题】:How to compile and run a program that uses multiple files through terminal?如何通过终端编译和运行使用多个文件的程序?
【发布时间】:2015-03-13 06:09:56
【问题描述】:

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

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

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

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

【问题讨论】:

  • 从编译行中去掉头文件,你不需要编译头文件。
  • 顺便说一句,即使在没有编译器诊断的情况下编译程序,程序也可能(并且通常会)出错。这些错误称为错误,您可能需要花费数周时间才能找到并纠正错误!

标签: c++ terminal


【解决方案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.o、file2.o、file3.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 感兴趣。

一旦您的程序被调试(借助像 gdb 和 valgrind.... 这样的调试器),您可以通过将 -g 替换为 -O 或-O2(您甚至可以同时使用 -g -O 进行编译)。如果您对程序进行基准测试(例如使用time),请不要忘记要求编译器进行优化!

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

很重要

【讨论】:

    猜你喜欢
    • 2017-02-06
    • 2022-10-14
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    相关资源
    最近更新 更多