版权声明:本文为博主原创文章,未经博主允许不得转载。 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)
运行截图如下: