常見makefile寫法
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
原文地址: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
- 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的話
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成