zoukankan      html  css  js  c++  java
  • C++命令行多文件编译(g++)

    在刚开始学Java时用命令行进行编译代码。而C++一直在用IDE, 这次尝试下命令行编译。vs下也可以用cl.exelink.exe等命令来进行编译

    但这次是通过安装MinGW来学习命令编译,主要用到g++。

    (1)g++简介

    通过下面命令可查看g++版本

    g++ -v

    结果如下:

    也可以通过g++ --help 查看更多的可用命令。


    (2)编译单个文件

    编写单个文件的可执行程序代码hello.cpp如下

    1 #include <iostream>
    2 using namespace std;
    3 
    4 int main(){
    5     cout << "Hello World!" << endl;
    6 }
    View Code

    用cmd打开该文件所在的相应文件夹,并输入:g++ hello.cpp

    默认情况下,在该文件夹中将产生:a.exe, 此时在cmd中输入a,就可以看到输出结果。

    我们也可以自定义产生的可执行程序名,如test.exe, 我们只要输入:g++ hello.cpp  -o test

    然后就得到test.exe文件,在cmd中输入test就能够得到结果,实验结果如下:


    (3)编译多个文件

    定义头文件header.h, 头文件包含3个函数声明:

    int fact(int n);
    int static_val();
    int mabs(int);
    View Code

    定义函数定义文件func.cpp

    #include "header.h"
    
    int fact(int n)
    {
        int ret = 1;
        while(n > 1)
            ret *= n--;
        return ret;
    }
    
    int static_val()
    {
        static int count = 1;
        return ++count;
    
    }
    
    int mabs(int n)
    {
        return (n > 0) ? n : -n;
    }
    View Code

    定义主函数文件main.cpp

    #include <iostream>
    #include "header.h"
    using namespace std;
    
    
    int main()
    {
        int j = fact(5);
        cout << "5! is " << j << endl;
        for(int i=1; i<=5; ++i)
        {
            cout << static_val() << " ";
        }
        cout << endl;
        cout << "mabs(-8) is " << mabs(-8) << endl;
        return 0;
    }
    View Code

    在同一个文件夹下编辑header.hfunc.cppmain.cpp后,就可以进行多个文件编译,注意到在命令行编译中似乎没有头文件什么事,

    头文件只是起到声明的作用,因此只需编译两个*.cpp文件并链接就可以。

    输入下面两行分别编译两个文件:

    g++ -c func.cpp
    g++ -c main.cpp

    上面编译完成后生成两个文件:func.omain.o

    之后通过链接就可以得到最终的可执行程序,输入下面命令:

    g++ main.o func.o -o test

    最终产生可执行程序test.exe, 可以直接在cmd中输入验证,结果如下:

     


    ps: 似乎总在重复学习简单的东西,希望系统学习复习整理后,能够往前一步,学习更有趣、更高深的内容。

  • 相关阅读:
    最长公共子序列
    字符串循环左移
    收集雨水问题
    直方图最大矩阵面积
    逆波兰表达式
    最长括号匹配问题
    机器学习中用来防止过拟合的方法有哪些?
    制作coco数据集以在Detectron框架上进行数据的训练
    关于训练集,验证集,测试集的划分
    配置CUDA和cuDNN以及Detectron过程
  • 原文地址:https://www.cnblogs.com/mjk961/p/7862170.html
Copyright © 2011-2022 走看看