本文共 1669 字,大约阅读时间需要 5 分钟。
转自:
版权声明:本文为博主原创文章,未经博主允许不得转载。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.cHEADERS变量就等于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的话
本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sky-heaven/p/7211730.html,如需转载请自行联系原作者