Makefile简单的配置

China☆狼群 提交于 2021-02-13 14:00:43

一、文件配置目录

1)原目录

demo

   ├── Makefile

   ├── demo.cpp

   ├── demo.hpp

   └── main.cpp

2)make之后的目录

demo

├── Makefile

├── demo.cpp

├── demo.hpp

├── demo.o

├── main.cpp

├── main.o

└── target

 

二、 a setup for makefile

objects = main.o demo.o #定义一个变量
target: $(objects) #最终目标文件及其依赖的文件和生成方式 clang++ -std=c++11 $(objects) -g -o target #生成命令
main.o: demo.hpp #中间文件及其依赖文件和生成方式 clang++ -std=c++11 main.cpp -g -c -o main.o #生成命令
demo.o: demo.hpp #中间文件及其依赖文件和生成方式 clang++ -std=c++11 demo.cpp -g -c -o demo.o #生成命令
clean: #伪中间文件,既动作 rm -rf target $(objects) #清楚编译链接所产生的文件

  

  

注:对于中间文件的依赖文件,我们可以利用make的自动推导功能,只制定自定义依赖的头文件即可;对于中间文件的生成方式,由于默认的生成方式存在问题,我们需要制定。

三、more

  1)对于大型的project,我们可以新建一个src目录,将各个模块的源文件放在其下

  2)对于编译产生的中间文件,我们可以新建一个build目录,并将其置于其下

  3)对于产生的最终目标文件,我们可以新建一个bin目录,并将其置于其下

 4)对于编译链接,我们可以采用范性编程的思想,利用find和patsubst等命令来构造sources和objects等变量

如下:

#Folders
SRCDIR := src
BUILDDIR := build
TARGETDIR := bin
#target
EXECUTABLE := target
TRAGET = $(TARGETDIR)/$(EXECUTABLE)
#code lists
SRCEXT := cpp
SOURCES := $(shell find $(SRCDIR) -type f -name "*.$(SRCEXT)")
OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o))

$(TRAGET): $(OBJECTS)
	@mkdir -p $(TARGETDIR)
	@clang++ -std=c++11 $^ -g -o $(TRAGET) 

$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
	@mkdir -p $(BUILDDIR)
	@clang++ -std=c++11  -c -o $@ $<

clean:
	@rm -rf target $(TARGETDIR) $(BUILDDIR)

demo

├── Makefile

├── bin

│   └── target

├── build

│   ├── demo.o

│   └── main.o

└── src

    ├── demo.cpp

    ├── demo.hpp

    └── main.cpp

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!