Makefile学习笔记09|include外部文件定义统一的makefile头文件
希望看到这篇文章的朋友能在评论区留下宝贵的建议来让我们共同成长,谢谢。
这里是目录
本节我们解决一个问题。前面我们写了很多makefile,但是里面涉及一个问题,就是多数项目的结构都是一样的。如果我们可以统一出一个makefile头文件,供所有的makefile引用,就可以降低项目维护的成本。以后开发的项目只需要移植现成的makefile,修改一些参数即可,这样可以有效提高开发效率。下面就学习如何导入外部makefile。
导入外部makefile——定义统一的makefile.head
项目路径:~/make/src/test_include。创建文件:test_include.cpp、testcpp.cc、testc.c、makefile、…/makefile.mk。本节还将测试cpp程序中调用C语言的函数。makefile引用上层目录的makefile.mk。五个文件内容如下:
// test_include.cpp
#include <iostream>
extern void TestCpp();
extern "C" void TestC();
using namespace std;
int main(int argc,char* argv[])
{
TestCpp();
TestC();
return 0;
}
// testcpp.cc
#include <iostream>
void TestCpp()
{
std::cout<<"TestCpp\n";
}
// testc.c
#include <stdio.h>
void TestC()
{
printf("TestC\n");
}
# makefile
# 包含三个文件:test_include.cpp testcpp.cc testc.c
# 要自动添加这三个文件进行编译
TARGET:=test_include
include ../makefile.mk
# 可以根据子项目的需要追加CXXFLAGS
CXXFLAGS:=$(CXXFLAGS) -std=c++17
# ../makefile.mk
# 给TARGET一个默认值
ifndef TARGET
TARGET:=test
endif
# 这里的CXXFLAGS根据需要修改。其他变量同理。
CXXFLAGS:=-I../../include
LDFLAGS:=-L../xcom -L../xthread
LDLIBS:=-lpthread
SRCS:=$(wildcard *.cpp *.cc *.c)
OBJS:=$(patsubst %.cpp,%.o,$(SRCS))
OBJS:=$(patsubst %.cc,%.o,$(OBJS))
OBJS:=$(patsubst %.c,%.o,$(OBJS))
$(TARGET):$(OBJS)
$(CXX) $(LDFLAGS) $^ -o $@ $(LDLIBS)
clean:
$(RM) $(OBJS) $(TARGET)
.PHONY: clean
make一下就可以执行啦。有兴趣的同学可以用之前的项目测试一下makefile头文件的引用。
都看到这里了,可以给个点赞或者评论吗?达瓦里希( ̄^ ̄)ゞ