VS 使用命令行编译单个 C/C++ 源文件
在 Windows 系统的开始菜单栏里,找到 Developer Command Prompt for VS xxxx
应用程序,双击运行后,在 Command
窗口内执行以下命令来编单个 C/C++ 源文件。值得一提的是,这里需要将以下命令中的 HelloWorld
字符串替换为本地真正的 C/C++ 源文件的文件名。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| # 查看文件列表 > dir 2021/10/30 16:05 <DIR> . 2021/10/30 16:05 <DIR> .. 2021/10/30 22:15 601 HelloWorld.cpp
# 编译C/C++源文件(cl后面字符的是小写L不是数字1) > cl HelloWorld.cpp /EHsc
# 查看文件列表,发现成功编译后会多了两个文件 > dir 2021/10/30 16:53 <DIR> . 2021/10/30 16:53 <DIR> .. 2021/10/30 22:15 601 HelloWorld.cpp 2021/10/30 16:53 101,888 HelloWorld.exe 2021/10/30 16:53 1,976 HelloWorld.obj
# 运行编译后的C/C++程序 > HelloWorld 或者 HelloWorld.exe
|
VS 使用命令行编译多个 C/C++ 源文件
假设项目里有如下的三个 C/C++ 源文件,分别是 Array.h
、Array.cpp
、main.cpp
,那么编译这几个文件时就可以使用命令:cl main.cpp Array.cpp /EHsc
。值得一提的是,编译命令里不需要指定以 .h
作为后缀的文件,只需要指定所有以 .c
或者 .cpp
作为后缀的文件即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #pragma once
#include <iostream>
using namespace std;
class Array { public: Array(int length);
Array(const Array& array);
~Array();
public: void setData(int index, int value); int getData(int index); int length();
private: int m_length; int* m_space; };
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #include "Array.h"
Array::Array(int length) { cout << "有参构造函数被调用" << endl; if (length < 0) { length = 0; } this->m_length = length; this->m_space = new int[length]; }
Array::Array(const Array& array) { cout << "拷贝构造函数被调用" << endl; this->m_length = array.m_length; this->m_space = new int[array.m_length]; for (int i = 0; i < array.m_length; i++) { this->m_space[i] = array.m_space[i]; } }
Array::~Array() { cout << "析构函数被调用" << endl; if (this->m_space != NULL) { delete[] this->m_space; this->m_space = NULL; this->m_length = 0; } }
void Array::setData(int index, int value) { this->m_space[index] = value; }
int Array::getData(int index) { return this->m_space[index]; }
int Array::length() { return this->m_length; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #include <iostream> #include "Array.h"
using namespace std;
int main() {
Array array1(5);
for (int i = 0; i < array1.length(); i++) { array1.setData(i, i); }
for (int i = 0; i < array1.length(); i++) { cout << "array1[" << i << "] = " << array1.getData(i) << endl; }
Array array2 = array1;
for (int i = 0; i < array2.length(); i++) { cout << "array2[" << i << "] = " << array2.getData(i) << endl; }
return 0; }
|
执行命令编译 C/C++ 程序后,控制台输出的日志信息如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| > cl main.cpp Array.cpp /EHsc
用于 x86 的 Microsoft (R) C/C++ 优化编译器 19.29.30136 版 版权所有(C) Microsoft Corporation。保留所有权利。
main.cpp Array.cpp 正在生成代码... Microsoft (R) Incremental Linker Version 14.29.30136.0 Copyright (C) Microsoft Corporation. All rights reserved.
/out:main.exe main.obj Array.obj
|
运行编译后的 C/C++ 程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| > main
有参构造函数被调用 array1[0] = 0 array1[1] = 1 array1[2] = 2 array1[3] = 3 array1[4] = 4 拷贝构造函数被调用 array2[0] = 0 array2[1] = 1 array2[2] = 2 array2[3] = 3 array2[4] = 4 析构函数被调用 析构函数被调用
|
参考博客