转自:http://blog.csdn.net/ghostyu/article/details/7755177
版权声明:本文为博主原创文章,未经博主允许不得转载。 1、目标名称,摆脱手动设置目标名称 [cpp] view plain copy TARGET = $(notdir $(CURDIR)) all:$(TARGET) CMD.... $(CURDIR) 表示Makfile当前目录全路径 $(notdir $(path)) 表示把path目录去掉路径名,只留当前目录名 这样就可以得到Makefile当前目录名称,用目录名作为目标程序名是一个不错的选择 2、使用include,把所有Makefile共享的设置包含进来 [cpp] view plain copy BASE_DIR = /root/DM36x include $(BASE_DIR)/Rules.make XDC_PATH = $(DMAI_INSTALL_DIR)/packages [cpp] view plain copy DMAI_INSTALL_DIR在Rules.make中已经设置过,这样,需要使用DMAI_INSTALL_DIR变量的时候只要include 这个Rules.make接可以了 3、遍历遍历所有特定的源文件 [cpp] view plain copy SOURCES = $(wildcard *.c) HEADERS = $(wildcard *.h) 如果当前目录先有 main.c func.c func.h 这样SOURCES变量就等于main.c func.c HEADERS变量就等于func.h 这样就每次添加源文件后 就不需要重新修改makefile了 4、替换文件名称 [cpp] view plain copy OBJFILES = $(SOURCES:%.c=%.o) 如果SOURCES等与3中的main.c和func.c 这样OBJFILES就等于main.o func.o 同样摆脱了手动修改编译的中间文件名 5、交叉编译设置 [cpp] view plain copy VERBOSE = @ COMPILE.c = $(VERBOSE) $(MVTOOL_PREFIX)gcc $(C_FLAGS) $(CPP_FLAGS) -c LINK.c = $(VERBOSE) $(MVTOOL_PREFIX)gcc $(LD_FLAGS) 6、编译 [cpp] view plain copy $(OBJFILES): %.o: %.c $(HEADERS) @echo Compiling $@ from $<.. $(COMPILE.c) -o $@ $< 7、 [cpp] view plain copy 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-10-23 03:49:47