在命令行编译并运行C++程序,你需要一个C++编译器。最常见的编译器有GCC(GNU Compiler Collection)和Clang。如果你使用的是Windows,你还可以使用Microsoft的Visual C++编译器。
以下是在不同操作系统上使用命令行编译并运行C++程序的基本步骤:
对于GCC或Clang(Linux/macOS):
-
打开终端。
-
使用
g++
(GCC)或clang++
(Clang)命令加上你的源文件名来编译代码。例如,如果你的文件名是main.cpp
,你可以使用以下命令之一来编译它:- 使用GCC:
g++ -o myprogram main.cpp
- 使用Clang:
clang++ -o myprogram main.cpp
这里
-o myprogram
指定了输出的可执行文件的名称。 - 使用GCC:
-
编译成功后,运行生成的可执行文件:
./myprogram
对于Microsoft Visual C++(Windows):
-
打开命令提示符或者PowerShell。
-
如果你安装了Visual Studio,你需要设置环境变量以使用
cl
命令。通常可以通过运行Visual Studio的命令提示符来实现,这个命令提示符会预先配置好相关环境。 -
使用
cl
命令来编译你的源文件:cl /EHsc main.cpp
/EHsc
选项是用于指定异常处理模型的。 -
编译完成后,它会生成
main.exe
(假设你的源文件名为main.cpp
)。在命令行中运行它:main
请确保在尝试编译之前已经将C++编译器安装好,并且其路径已添加到系统的环境变量中,这样你才能在任意位置调用编译器命令。如果编译过程中出现错误,请根据命令行中给出的错误信息进行相应的调整。
报错
error This file requires compiler and library support for the ISO C++ 2011 standard
解决:
$ g++ test1.cpp -std=c++11
// test1.cpp
#include <iostream>
#include <chrono>
int main() {
// 获取当前时间点
std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();
// 转换为自 epoch 以来的时间长度
auto duration = now.time_since_epoch();
// 将 duration 转换为秒
long long seconds = std::chrono::duration_cast<std::chrono::seconds>(duration).count();
std::cout << "Current timestamp (seconds since epoch): " << seconds << std::endl;
return 0;
}
其他C++标准
g++ -std=c++98 test_std.cpp
g++ -std=c++03 test_std.cpp
g++ -std=c++11 test_std.cpp
g++ -std=c++14 test_std.cpp
g++ -std=c++17 test_std.cpp
g++ -std=c++2a test_std.cpp
在make的是否指定C++标准
在Makefile中指定C++标准,你需要设置编译器的选项来包含 -std=c++XX
标志,其中 XX
是你想要使用的C++标准的年份,比如 c++11
、c++14
、c++17
等。
下面是一个简单的Makefile示例,它指定了C++标准为C++11:
CXX=g++
CXXFLAGS=-std=c++11 -Wall
all: myprogram
myprogram: main.o
$(CXX) $(CXXFLAGS) -o myprogram main.o
main.o: main.cpp
$(CXX) $(CXXFLAGS) -c main.cpp
clean:
rm -f *.o myprogram
在这个Makefile中,变量 CXX
用于指定C++编译器,通常是 g++
或者 clang++
。CXXFLAGS
是传递给编译器的选项,我们在这里加入了 -std=c++11
来指定使用C++11标准,还有 -Wall
选项用于打开大多数编译警告。
当你运行 make
命令时,Makefile中定义的规则将会被执行,编译器将使用指定的C++标准来编译程序。
如果你需要根据不同情况选择不同的C++标准,你可以通过命令行传递参数来覆盖 CXXFLAGS
的值,例如:
make CXXFLAGS="-std=c++14 -Wall"
这样就会使用C++14标准来编译你的程序。记住,每次改变编译选项时最好先运行 make clean
清除旧的对象文件,然后再运行 make
来重新编译程序,以确保所有文件都是用新选项编译的。