Linux学习笔记-子目录的支持

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq78442761/article/details/82049427

在实际的工程项目中会使用子目录:
通常,一个项目下会有多个子目录,一个子目录通常在逻辑上是一个模块(不是强制要求)

Makefile相当于项目级的文件

如:
 

MyTestPro/
	Makefile
	src/
		main.cpp
	object/
		object.cpp
		object.h

在Makefile中,要自动罗列出子目录下的CPP文件,使用foreach


foreach相当于for循环;
dir相当于一个迭代器,像int i=0,i++这些;
第三个参数就是一个循环体;

文件结构如上面所属,源码如下:

object.h


struct MyPro{
	int m_value_a;
	int m_value_b;
	
	MyPro(){
		m_value_a=1;
		m_value_b=2;
	}
};

void printHello();

object.cpp

#include "object.h"
#include <stdio.h>

void printHello(){
	
	printf("helloWorld!\n");
}

main.cpp

#include "../object/object.h"
#include <stdio.h>

int main(){
	MyPro pro;
	printf("a=%d,b=%d\n",pro.m_value_a,pro.m_value_b);
	printHello();
	return 0;
}

Makefile

EXE=helloworld
SUBDIR= src object

CXX_SOURCES=$(foreach dir,$(SUBDIR), $(wildcard $(dir)/*.cpp))
CXX_OBJECT=$(patsubst %.cpp, %.o, $(CXX_SOURCES))
DEP_FILES=$(patsubst %.o, %d, $(CXX_OBJECT))

$(EXE): $(CXX_OBJECT)
	g++ $(CXX_OBJECT) -o $(EXE)
	
%.o: %.CPP
	g++ -c -MMD $< -o $@
	
-include $(DEP_FILES)

clean:
	rm -rf $(CXX_OBJECT) $(DEP_FILES) $(EXE)

运行截图如下:

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/82049427
今日推荐