gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:23:02 27 4
gpt4 key购买 nike

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

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

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

我计划在此程序中包含更多文件,但不知道这是否是每次编译的最佳方式?无论如何,我如何编译这个程序才能运行?我知道该程序没有任何错误,因为我在 IDE Xcode 中对其进行了测试。

最佳答案

如果你真的想要,你可以输入几个命令(-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 必须重新生成(最后的链接再次生成 运行)

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

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

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

关于c++ - 如何通过终端编译和运行一个使用多个文件的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29025905/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com