写一个通用的Makefile,递归查找所有目录的.cpp文件和.h文件,编译链接成一个可执行程序
时间: 2024-09-24 21:23:08 浏览: 90
linux Makefile 多个*.h、*.c 编译.ko文件参考
创建一个通用的Makefile来递归查找cpp和h文件并编译链接成可执行程序,你可以参考以下的示例。假设源码文件夹名为src,目标可执行文件命名为output,并且已经有一个库目录lib包含头文件。这里使用GNU Make的一些基本规则:
```makefile
# 全局变量设置
SOURCES = $(wildcard src/*.cpp) $(wildcard lib/*.h)
OBJECTS = $(SOURCES:.cpp=.o)
# 编译规则
%.o: %.cpp %.h
$(CC) -c -I lib -o $@ $<
# 静态链接规则
all: $(OBJECTS)
$(CC) -o output $(OBJECTS)
# 清理规则
clean:
rm -f *.o output
# 深度清理规则,删除中间产物
distclean: clean
rm -rf obj
.PHONY: all clean distclean
# 如果当前目录下有新的cpp或h文件,自动更新
watch:
$(MAKE) -C . -f $(lastword $(MAKEFILE_LIST)) $(@)
# 递归查找cpp和h文件
check-srcs:
@echo "Sourcing files:"
@find src lib -name "*.cpp" -o -name "*.h"
```
在这个Makefile中,`$(wildcard)`用于动态获取指定目录下的cpp和h文件,`$(CC)`代表你的C++编译器。运行`make all`将会编译所有源文件并链接生成可执行文件。`make clean`用于清理编译后的中间文件,`make distclean`则会深度清理。
注意,你需要根据实际的项目结构和依赖调整这个Makefile。此外,`watch`目标可以让你在源代码更改时自动重新编译,这需要支持`--directory=.`选项的Make。
阅读全文