在命令行下使用vs2015编译器编译cpp文件

找到vs2015的编译器

D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\cl.exe
找到编译器后,把文件夹(即:D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\)放到path环境变量中。

添加include路径(头文件路径)到INCLUDE

先找到include路径包含那些文件夹。我们需要借助vs2015软件来查看。
在这里插入图片描述
添加路径到INCLUDE环境变量,如果没有则新建该环境变量。(注:环境变量的名字一定要是INCLUDE)

添加库文件路径(头文件的实现文件)到LIB

先找到库文件夹路径包含那些文件夹。我们需要借助vs2015软件来查看。
在这里插入图片描述
添加路径到LIB环境变量,如果没有则新建该环境变量。(注:环境变量的名字一定要是LIB)

新建一个cpp文件

#include <iostream>

using namespace std
GNU libiconv-1.15和libintl-0.19.8.1,VS2015工程和 Makefile 命令行编译文件 优快云-tags: libiconv1.15 libintl 0.19.8.1 VS2015 Makefile 声明: 代码为本人良心制作,虽然花费了一定的时间和精力,但不保证完全没有错误。如果您下载并使用了本代码,将其包含在您发布的应用中,给您带来了经济上,心理上,生活上的损失,本人不负有责任。 所有代码都基于官网进行修改,iconv的代码来源于libiconv-1.15的lib目录,intl的代码来源于gettext-runtime的intl目录。 intl需要iconv的支持,如果想单独编译不需要iconv的intl, 请自行修改intl目录下的config.h文件, /* Define if you have the iconv() function and it works. */ #define HAVE_ICONV 1 /* Define to 1 if you have the header file. */ #define HAVE_ICONV_H 1 为: /* Define if you have the iconv() function and it works. */ /* #undef HAVE_ICONV */ /* Define to 1 if you have the header file. */ /* #undef HAVE_ICONV_H */ 并修改VS工程中预处理器定义,删掉/DDEPENDS_ON_LIBICONV=1 VS的工程为VS2015的工程文件使用VC140工具集,如果没有2015,也可以用Makefile.mak文件编译。 nmake /f Makefile.mak [DLL] [DEBUG] 指定 DLL=1 编译dll版本,默认是lib版本,libiconv.lib , libintl.lib。 指定 DEBUG=1 编译debug版本,默认是release版本。 同理,如果intl不需要iconv,请修改上面的配置文件选项,并, 删掉Makefile.mak中/DDEPENDS_ON_LIBICONV=1 配置文件的制作,参考了以下几处,修改的大概原则是,能定义的全定义了,就这样: https://github.com/kahrl/gettext-msvc 这个地址提供了libiconv和libintl的VS工程和配置文件。 https://github.com/winlibs 为编译PHP而修改的libiconv和libintl源码,libiconv是最新1.15版本,gettext不是。 附带的Cygwin目录中的工具 libiconv官方的制作文档,用cygwin配合VC,生成的配置文件。 一大堆的宏和函数搞得我头晕脑涨。所以配置文件如果有错误,也在所难免,所有修改的文件,如config.h,iconv.h,libintl.h都附带了原始文件。 如: 配置文件 原始文件 DLL原始文件 LIB原始文件 config.h config.h.in iconv.h iconv.h.build.in iconv.h.in localcharset.h localcharset.h.build.in localcharset.h.in libgnuintl.h libgnuintl.in.h 欢迎同学们下载测试。有问题可以给我发邮件travel981cn@139.com
在 Linux 命令行环境中编译 C++ 源文件,通常使用 `g++` 或 `gcc` 命令。虽然 `gcc` 最初是专为 C 语言设计的编译器,但现在它是 GNU Compiler Collection 的一部分,可以支持多种语言,包括 C++。当处理 `.cpp` 后缀的源文件时,`gcc` 实际上调用的是 `g++` 编译器[^1]。 ### 单个 C++ 源文件编译 对于单个 C++ 源文件,可以直接使用 `g++` 命令进行编译并生成可执行文件。例如,假设有一个名为 `main.cpp` 的源文件: ```bash g++ main.cpp -o main ``` 上述命令中,`-o main` 指定了输出文件的名称为 `main`。如果不指定 `-o` 参数,则默认生成的可执行文件名为 `a.out`。 如果希望使用 `gcc` 来编译 `.cpp` 文件,也可以实现相同的功能,但需要注意 `gcc` 不会自动链接 C++ 标准库,因此需要手动添加 `-lstdc++` 参数以链接 C++ 运行时库: ```bash gcc main.cpp -o main -lstdc++ ``` ### 多个 C++ 源文件编译 当项目包含多个 C++ 源文件时,可以选择一次性编译所有文件,或者分阶段进行编译和链接。例如,假设有两个源文件 `file1.cpp` 和 `file2.cpp`,可以通过以下方式编译: #### 一次性编译 直接将所有源文件作为参数传入 `g++` 命令,由编译器自动完成编译和链接过程: ```bash g++ file1.cpp file2.cpp -o program ``` 这种方式适用于小型项目或快速构建测试程序,简化了构建流程[^3]。 #### 分阶段编译(适用于大型项目) 在大型项目中,通常会先分别编译每个源文件为对象文件(`.o`),然后再进行链接。这有助于增量编译,提高开发效率。 第一步:编译每个源文件为对象文件: ```bash g++ -c file1.cpp g++ -c file2.cpp ``` 这里的 `-c` 参数表示只执行到汇编阶段,生成 `.o` 对象文件,不进行链接[^2]。 第二步:链接所有对象文件生成最终的可执行文件: ```bash g++ file1.o file2.o -o program ``` 这种方法允许开发者仅重新编译发生更改的源文件,而不必每次都重新编译整个项目,从而节省时间。 ### 静态库与动态库的编译 除了直接编译生成可执行文件外,还可以创建静态库(`.a`)或共享库(`.so`)。静态库会在链接阶段被完整地复制到目标可执行文件中,使得最终的二进制文件可以在没有依赖库的情况下独立运行,但也导致了较大的文件体积以及更新库时必须重新编译应用程序的问题[^4]。 创建静态库的过程如下: 1. 将多个源文件编译为对象文件: ```bash g++ -c libsource1.cpp g++ -c libsource2.cpp ``` 2. 使用 `ar` 工具将这些对象文件打包成一个静态库: ```bash ar rcs libmylib.a libsource1.o libsource2.o ``` 3. 在主程序中引用该库并进行链接: ```bash g++ main.cpp -L. -lmylib -o myapp ``` 其中 `-L.` 表示告诉链接器当前目录下查找库文件,`-lmylib` 则是指定要链接的库名(去掉前缀 `lib` 和后缀 `.a`)。 通过以上方法,可以在 Linux 命令行环境下有效地编译 C++ 源文件,并根据项目的复杂程度选择合适的编译策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值