Ubuntu20.04 g++编译多C++文件

这边主要还是回顾下编译的基础知识,主要有两种形式,一种是无头文件,通过提前声明函数方式,来关联多个文件;一种是通过头文件形式来联系多个文件。编译相关的基础概念可参见如下博客:

我终于把C++多文件编程理解透彻了_chen_z_p的博客-CSDN博客_c++多文件编程

C++命令行多文件编译(g++) - niokit - 博客园

C++如何进行多文件编程?(汇总版)

两种形式分别在win10 vs2019环境下进行了实现,第一种形式是无头文件,文件排列结构如下:

multiFiles_vs.cpp中的内容如下:

// multiFiles_vs.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
int fun(int a,int b);
int main()
{
    int a = 0;
    int b = 0;
    std::cin >> a >> b;
    int c = fun(a,b);
    std::cout << c << std::endl;
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

fun.cpp中的内容如下:

int add(int a, int b);
int sub(int a, int b);
int fun(int a, int b)
{
	return(add(a, b) + sub(a, b));
}

 add.cpp中的内容如下:

int add(int a, int b)
{
	return(a + b);
}

sub.cpp中的内容如下:

int sub(int a, int b)
{
	return(a - b);
}

运行结果如下:

第二种形式是有头文件,同样环境下工程结构如下:

main.cpp文件中的代码如下:

#include "fun.h"
#include <iostream>
int main()
{
    int a = 0;
    int b = 0;
    std::cin >> a >> b;
    int c = fun(a, b);
    std::cout << c << std::endl;
}

 fun.h文件中的代码如下:

#pragma once
#ifndef FUN_H
#define FUN_H
int fun(int a, int b);
#endif

 fun.cpp文件中的代码如下:

#include "add.h"
#include "sub.h"
int fun(int a, int b)
{
	return(add(a, b) + sub(a, b));
}

add.h文件中的代码如下:

#pragma once
#ifndef ADD_H
#define ADD_H
int add(int a, int b);
#endif // !ADD_H

add.cpp文件中的代码如下:

int add(int a, int b)
{
	return(a + b);
}

sub.h文件中的代码如下:

#pragma once
#ifndef SUB_H
#define SUB_H
int sub(int a, int b);
#endif

sub.cpp文件中的代码如下:

int sub(int a, int b)
{
	return(a - b);
}

运行结果如下:

我们在ubuntu环境下通过g++来编译执行程序,先来查看下g++的版本

首先来编译第一种形式,即没有头文件的版本,尝试了两种方法,一种是直接通过g++编译、链接生成执行文件,一种是先编译,再链接,后者的好处是节省时间,比如只有add.cpp发生变化了,如果用前者方式,则还需要编译其余的cpp;后者的话,只需要把发生变化的cpp编译后,和其它目标文件链接即可。同时也发现,编译文件的前后顺序,以及链接过程中,链接的目标文件的前后顺序都不影响结果。

 第二种形式的编译命令如下,可以看到并不需要.h文件的参与,同时先尝试了过程中,如果参与缺少一个cpp文件,会出现如下的报错。

第二种形式下,依然可以先编译,在进行目标的链接,生成可运行文件

注:1. 也可以使用QTCreator来做集成开发环境(IDE),配置方法见如下博客链接:

《利用QTCreator编写C++程序》(Helloworld)_白鱼儿的博客-CSDN博客

编写上面功能程序,运行后效果如下:

也可以进行debug

2. vscode开发环境配置方法可参考如下博客:

Ubuntu下安装并配置VS Code编译C++ - tongqingliu - 博客园

将 VSCode 打造成 OpenCV 的 IDE(C++,window10 1803)_zhaiax672的博客-CSDN博客

VScode搭建OpenCV环境 - KenSporger - 博客园

3.codeblocks开发环境配置方法可参考如下博客:

CodeBlocks下载与安装教程_杨松赞的博客-CSDN博客

code::blocks16.01配置opencv3.1.0 - 简书

由于用QT做过实际的项目,比较熟悉,所以后面博主主要还是使用QT开发环境

猜你喜欢

转载自blog.csdn.net/jiugeshao/article/details/120443683