原文地址:blog.csdn.net/ghostyu/article/details/7755177
1、目标名称,摆脱手动设置目标名称
[cpp] view plaincopy
- TARGET = $(notdir $(CURDIR))
- all:$(TARGET)
- CMD....
$(CURDIR) 表示Makfile当前目录全路径
$(notdir $(path)) 表示把path目录去掉路径名,只留当前目录名
这样就可以得到Makefile当前目录名称,用目录名作为目标程序名是一个不错的选择
2、使用include,把所有Makefile共享的设置包含进来
[cpp] view plaincopy
- BASE_DIR = /root/DM36x
- include $(BASE_DIR)/Rules.make
- XDC_PATH = $(DMAI_INSTALL_DIR)/packages
[cpp] view plaincopy
- DMAI_INSTALL_DIR在Rules.make中已经设置过,这样,需要使用DMAI_INSTALL_DIR变量的时候只要include 这个Rules.make接可以了
3、遍历遍历所有特定的源文件
[cpp] view plaincopy
- SOURCES = $(wildcard *.c)
- HEADERS = $(wildcard *.h)
如果当前目录先有 main.c func.c func.h
这样SOURCES变量就等于main.c func.c
HEADERS变量就等于func.h
这样就每次添加源文件后 就不需要重新修改makefile了
4、替换文件名称
[cpp] view plaincopy
- OBJFILES = $(SOURCES:%.c=%.o)
如果SOURCES等与3中的main.c和func.c
这样OBJFILES就等于main.o func.o
同样摆脱了手动修改编译的中间文件名
5、交叉编译设置
[cpp] view plaincopy
- VERBOSE = @
- COMPILE.c = $(VERBOSE) $(MVTOOL_PREFIX)gcc $(C_FLAGS) $(CPP_FLAGS) -c
- LINK.c = $(VERBOSE) $(MVTOOL_PREFIX)gcc $(LD_FLAGS)
6、编译
[cpp] view plaincopy
- $(OBJFILES): %.o: %.c $(HEADERS)
- @echo Compiling $@ from $<..
- $(COMPILE.c) -o $@ $<
7、
[cpp] view plaincopy
- install: $(if $(wildcard $(TARGET)), install_$(TARGET))
- install_$(TARGET):
- @install -d $(EXEC_DIR)
- @install $(TARGET) $(EXEC_DIR)
- @install $(TARGET).txt $(EXEC_DIR)
- @echo
- @echo Installed $(TARGET) binaries to $(EXEC_DIR)..
先判断当前目录是否有$(TARGET),如果有,就执行伪目标install_$(TARGET),这个展开了就相当于install_app,如果$(TARGET)等于app的话
时间: 2024-11-10 00:57:58