gpt4 book ai didi

c++ - 在makefile中规避重复库头和typedef的方法

转载 作者:行者123 更新时间:2023-11-30 02:16:09 25 4
gpt4 key购买 nike

背景

假设我有这样的文件结构:

|Makefile
|build
|source
|-FunctionLinker.h
|-main.cpp
|-A.cpp
|-B.cpp
|-C.cpp

我想使用 Makefile 进行编译并将生成的目标文件保存在 build 文件夹中。这些文件的内容如下:

生成文件

CXX = g++ -std=c++11
CXXFLAGS = -c -Wall

OBJS = build/main.o build/A.o build/B.o build/C.o
all: Project
Project: $(OBJS)
$(CXX) -o $@ $(OBJS)

build/%.o: source/%.cpp
$(CXX) -o $@ $(CXXFLAGS) $<

main.cpp

#include <iostream>
#include <vector>
#include "FunctionLinker.h"

int main(){
Vector ExampleVector = {1,2};
Matrix ExampleMatrix = {{1,2},{3,4}};

A(ExampleVector, ExampleMatrix); // which is void
B(ExampleVector, ExampleMatrix); // which is also void
VectorMatrix Res = C(ExampleVector, ExampleMatrix); // which returns struct

for (int i=0; i<2; i++){
std::cout << Res.Vector[i] << '\t'
}
}

A.cpp(B.cpp差不多)

#include <iostream>
#include <vector>

typedef std::vector<double> Vector;
typedef std::vector<Vector> Matrix;

void A(Matrix& A, Vector& b){
Some calculations...
}

C.cpp

#include <iostream>
#include <vector>

typedef std::vector<double> Vector;
typedef std::vector<Vector> Matrix;

VectorMatrix C(Matrix& A, Vector& b){
Some calculations...
}

FunctionLinker.h

#ifndef FUNCTIONLINKER.H
#define FUNCTIONLINKER.H

#include <iostream>
#include <vector>

typedef std::vector<double> Vector;
typedef std::vector<Vector> Matrix;

struct VectorMatrix{
Vector Vector;
Matrix Matrix;
}; // I defined a struct here to allow a function to return multiple types

void A(Matrix A, Vector b);
void B(Matrix A, Vector b);
VectorMatrix C(Matrix A, Vector b);

#endif

问题

所以 Makefile 非常有效,但我怀疑这是否是最有效的做法。因为下面的代码

#include <iostream>
#include <vector>

typedef std::vector<double> Vector;
typedef std::vector<Vector> Matrix;

是相当多余的,所以我想找一个更“简洁”的方式来练习。任何帮助将不胜感激。

最佳答案

头文件的意义在于您可以将它们包含到每个需要一些重复代码行的源文件中。因此,如果您在所有源文件中添加 #include "FunctionLinker.h",就可以删除多余的代码行。

请注意,这与 makefile 无关。问题和解决方案在您的 C++ 代码中。

关于c++ - 在makefile中规避重复库头和typedef的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55295125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com