六、多文件分离式编译

小吴湾的北极熊 / 2024-02-23 / 原文

六、多文件分离式编译

分离式编译意味着将项目程序分离到几个文件当中,每个文件独立编译,通常用于C++项目当中。

1. 文件组织结构

下面以一个阶乘示例来说明,一个文件夹下面共有3个文件,分别是主文件,被调用的函数所在文件和头文件:

fact.cpp是被调用的子函数所在文件:

#include "Chapter6.h"

long int factorial(int n){
    if (n <= 0){
        return -1;
    }

    long int result = 1;
    for (int i = 1; i <= n; i++)
        result *= i;

    return result;

}

Chapter6.h是头文件:

#ifndef FACTORIAL_H   //防止重复声明
#define FACTORIAL_H

long int factorial(int n);

#endif

factMain.cpp是主文件:

#include <iostream>
#include "Chapter6.h"

using namespace std;

int main(){
    long int factorial_n;
    int n;
    cout << "Please input integer n: " << endl;
    cin >> n;
    factorial_n = factorial(n);
    cout << "The factorial of " << n << " is " << factorial_n << endl;
    return 0;
}

2. 编译方式

在Linux系统中:

g++ factMain.cpp fact.cpp -o main.o   # main.o为输出文件

或者

g++ -c factMain.cpp  # generates factMain.o
g++ -c fact.cpp   # generates fact.o
g++ factMain.o fact.o -o main.o

3. 题外话:vscode多文件配置

多文件配置文件task.json

"args": [
                "$\frac{{fileDirname}}{*.cpp",} //单文件写"${file}"
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}.o",
                "-g",
                "-Wall",
                "-static-libgcc",
                "-std=c++17"
            ],