免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1699 | 回复: 8
打印 上一主题 下一主题

也贴个俺的Makefile吧 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-15 16:19 |只看该作者 |倒序浏览
以前我用的Makefile, 可以根据一个project.cfg文件里的描述,自动重建Makefile本身和ARM codewarrior的项目文件,
也可以支持tar.gz, tar.bz2, zip, rar 和 7z 格式的打包。
make help 可以显示支持的target的帮助。

Makefile

  1. ###############################################################################
  2. #
  3. # Makefile that can supports build, distribution, re-create Makefile and
  4. # .mcp (CodeWarrior) from "project.cfg".
  5. #
  6. ###############################################################################


  7. #Stock varible for config file, do not edit it!
  8. PROJECT_CONFIG := project.cfg
  9. PROJECT_DIR := $(notdir $(shell pwd))
  10. PROJECT_PATH := $(shell pwd)




  11. ###############################################################################
  12. #Configuration of this Makefile.
  13. ###############################################################################

  14. PROJECT_NAME :=\
  15.         project_name


  16. LINK_SOURCE :=


  17. DIST_BASE_DIR :=\
  18.         ..


  19. DIST_FILE :=\
  20.         .\
  21.         ./reference/$(THIS_MAKEFILE)


  22. NO_DIST_FILE :=\
  23.         .*\\.o\
  24.         .*_Data\
  25.         .*/Thumbs.db


  26. SUB_PROJECT :=











  27. ###############################################################################
  28. #Make environment.
  29. ###############################################################################
  30. LIBS := $(LIBS) -lm -lc -lgcc -lc


  31. .SUFFIXES : .x .o .c .s

  32. BUILD_ROOT := /usr/local/arm_semihost/
  33. LIB := ${BUILD_ROOT}arm-elf/lib
  34. LIB1 := ${BUILD_ROOT}lib/gcc-lib/arm-elf/3.0/
  35. LIB2 := ${BUILD_ROOT}lib/gcc-lib/arm-elf/3.3.2/

  36. INCLUDE := ${BUILD_ROOT}arm-elf/include


  37. PATH := ${BUILD_ROOT}bin:${PATH}
  38. CFLAGS := -I${INCLUDE} -I. -fshort-wchar -mcpu=arm7tdmi -O2 -Wall -DPLATFORM_SEMIHOST_W90N740
  39. CC := arm-elf-gcc
  40. CPP := arm-elf-g++
  41. AR := arm-elf-ar
  42. AS := arm-elf-as
  43. LD := arm-elf-ld -zo
  44. OC  = arm-elf-objcopy

  45. WEC_LDFLAGS := -L. -L${LIB} -L${LIB1} -L${LIB2} -T../../Samples/armelf.lds





  46. ###############################################################################
  47. #Runtime data and escaped strings in shell
  48. ###############################################################################

  49. THIS_MAKEFILE := $(word 1, $(MAKEFILE_LIST))

  50. #If project name not found, use the directory name instead.
  51. ifndef PROJECT_NAME
  52. REAL_PROJECT_NAME := $(notdir $(shell pwd))
  53. else
  54. REAL_PROJECT_NAME := $(PROJECT_NAME)
  55. endif


  56. #Objects
  57. LINK_OBJECT := $(patsubst %.c,%.o,\
  58.                                 $(patsubst %.cpp,%.o,\
  59.                                 $(patsubst %.c++,%.o,\
  60.                                 $(patsubst %.cc,%.o,\
  61.                                 $(LINK_SOURCE)))))


  62. #Escape function for shell
  63. sh_escape_parenthesis_l=(
  64. sh_escape_parenthesis_r=)
  65. sh_escape = $(subst\
  66.                         |,\|,$(subst\
  67.                         $(sh_escape_parenthesis_l),\$(sh_escape_parenthesis_l),$(subst\
  68.                         $(sh_escape_parenthesis_r),\$(sh_escape_parenthesis_r),$(subst\
  69.                         \#,\\\#,$(subst\
  70.                         >,\>,$(subst\
  71.                         <,\<,$(subst\
  72.                         \\,\,$(subst\
  73.                         \b\,b,$(subst\
  74.                         \a\,a,$(subst\
  75.                         b',"'",$(subst\
  76.                         a",'"',$(subst\
  77.                         ',b',$(subst\
  78.                         ",a",$(subst\
  79.                         b,\b\,$(subst\
  80.                         a,\a\,$(subst\
  81.                         \,\\,$(1)))))))))))))))))


  82. #Shell-escaped strings
  83. ESC_THIS_MAKEFILE := $(call sh_escape,$(THIS_MAKEFILE))
  84. ESC_PROJECT_NAME := $(call sh_escape,$(REAL_PROJECT_NAME))
  85. ESC_LINK_SOURCE := $(call sh_escape,$(LINK_SOURCE))
  86. ESC_LINK_OBJECT := $(call sh_escape,$(LINK_OBJECT))
  87. ESC_DIST_BASE_DIR := $(call sh_escape,$(DIST_BASE_DIR))
  88. ESC_DIST_FILE := $(call sh_escape,$(DIST_FILE))
  89. ESC_NO_DIST_FILE := $(call sh_escape,$(NO_DIST_FILE))
  90. ESC_SUB_PROJECT := $(call sh_escape,$(SUB_PROJECT))
  91. ESC_PROJECT_CONFIG := $(call sh_escape,$(PROJECT_CONFIG))
  92. ESC_PROJECT_DIR := $(call sh_escape,$(PROJECT_DIR))
  93. ESC_PROJECT_PATH := $(call sh_escape,$(PROJECT_PATH))
  94. LIBS := $(call sh_escape,$(LIBS))
  95. CFLAGS := $(call sh_escape,$(CFLAGS))
  96. CC := $(call sh_escape,$(CC))
  97. CPP := $(call sh_escape,$(CPP))
  98. AR := $(call sh_escape,$(AR))
  99. AS := $(call sh_escape,$(AS))
  100. LD := $(call sh_escape,$(LD))
  101. OC := $(call sh_escape,$(OC))




  102. ###############################################################################
  103. #Targets start from here.
  104. ###############################################################################

  105. .PHONY: default
  106. default: help



  107. .PHONY: build
  108. ifdef LINK_SOURCE
  109. build: proj_all_Makefile $(LINK_OBJECT) $(REAL_PROJECT_NAME).bin
  110. else
  111. build: proj_all_Makefile $(LINK_OBJECT)
  112. endif
  113.         @\
  114.         for i in $(ESC_SUB_PROJECT); do \
  115.                 make -C "$$i" build; \
  116.         done; \


  117. ifdef LINK_SOURCE
  118. $(REAL_PROJECT_NAME).bin: $(LINK_OBJECT)
  119.         @echo Make application.
  120.         $(LD) -o $(ESC_PROJECT_NAME).elf $(WEC_LDFLAGS) $(ESC_LINK_OBJECT) $(LIBS)
  121.         $(OC) -I elf32-littlearm -O binary $(ESC_PROJECT_NAME).elf $(ESC_PROJECT_NAME).bin
  122.         rm -f $(ESC_PROJECT_NAME).elf
  123. endif


  124. .c.o:
  125.         $(CC) $(CFLAGS) -c -o "$*.o" "$*.c"

  126. .cc.o:
  127.         $(CPP) $(CFLAGS) -c -o "$*.o" "$*.cc"

  128. .cpp.o:
  129.         $(CPP) -c -o "$*.o" "$*.cpp"

  130. .cxx.o:
  131.         $(CPP) -c -o "$*.o" "$*.c++"

  132. .s.o:
  133.         $(AS) -ahld -o "$*.o" "$*.s"



  134. .PHONY: clean
  135. clean: proj_all_Makefile
  136. ifdef LINK_SOURCE
  137.         rm -f $(ESC_LINK_OBJECT)
  138.         rm -f $(ESC_PROJECT_NAME).x
  139.         rm -f $(ESC_PROJECT_NAME).elf
  140.         rm -f $(ESC_PROJECT_NAME).bin
  141.         rm -f $(ESC_PROJECT_NAME).zip
  142. endif
  143.         @\
  144.         for i in $(ESC_SUB_PROJECT); do \
  145.                 make -C "$$i" clean; \
  146.         done; \



  147. .PHONY: proj
  148. proj: proj_all_Makefile $(REAL_PROJECT_NAME).mcp
  149.         @for i in $(ESC_SUB_PROJECT); do \
  150.                 make -C "$$i" proj; \
  151.         done; \


  152. .PHONY: proj_all_Makefile
  153. proj_all_Makefile: $(THIS_MAKEFILE)
  154.         @for i in $(ESC_SUB_PROJECT); do \
  155.                 if [ ! -f "$$i/Makefile" ]; then \
  156.                         cp "./$(ESC_THIS_MAKEFILE)" "$$i/Makefile"; \
  157.                         make -C "$$i" force_Makefile; \
  158.                 fi; \
  159.         done; \


  160. .PHONY: force_Makefile
  161. $(THIS_MAKEFILE) force_Makefile: $(PROJECT_CONFIG)
  162.         @\
  163.         echo "Re-create $(ESC_THIS_MAKEFILE) from "$(ESC_PROJECT_CONFIG)"."; \
  164.         if ! awk --version > /dev/null; then exit 1; fi; \
  165.         s_tmp_makefile="/tmp/$(ESC_THIS_MAKEFILE).new"; \
  166.         awk -v head="PROJECT_NAME=LINK_SOURCE=DIST_BASE_DIR=DIST_FILE=NO_DIST_FILE=SUB_PROJECT" \
  167.                 '{\
  168.                         split(head, ahead, /=/); \
  169.                         for (i in ahead) \
  170.                         { \
  171.                                 if ($$0 ~ "^[[:space:]]*"ahead[i]) \
  172.                                 { \
  173.                                         while ($$0 ~ /\\$$/) \
  174.                                         { \
  175.                                                 getline; \
  176.                                         } \
  177.                                         getline; \
  178.                                         if (!b_insert[i]) \
  179.                                         { \
  180.                                                 printf "%s :=", ahead[i]; \
  181.                                                 b_insert[i] = 1; \
  182.                                                 cfg_reg = "^[[:space:]]*"ahead[i]"(_GCC)?[[:space:]]*="; \
  183.                                                 while (getline cfg_line < "'$(ESC_PROJECT_CONFIG)'") \
  184.                                                 { \
  185.                                                         if (cfg_line ~ cfg_reg) \
  186.                                                         { \
  187.                                                                 sub(cfg_reg, "", cfg_line); \
  188.                                                                 gsub(/(^[[:space:]]*|[[:space:]]*$$)/, "", cfg_line); \
  189.                                                                 gsub(/[[:space:]#\\]/, "\\\\&", cfg_line); \
  190.                                                                 printf "\\\n        %s", cfg_line; \
  191.                                                         } \
  192.                                                 } \
  193.                                                 print ""; \
  194.                                                 close ("'$(ESC_PROJECT_CONFIG)'") \
  195.                                         } \
  196.                                 } \
  197.                         } \
  198.                         print; \
  199.                 }' "$(ESC_THIS_MAKEFILE)" > "$$s_tmp_makefile"; \
  200.         cp "$$s_tmp_makefile" "$(ESC_THIS_MAKEFILE)"; \
  201.         rm -f "$$s_tmp_makefile"; \
  202.         { make -f "$(ESC_THIS_MAKEFILE)" depend || :; } 2> /dev/null; \



  203. $(REAL_PROJECT_NAME).mcp: $(PROJECT_CONFIG)
  204.         @\
  205.         echo "Re-create "$(ESC_PROJECT_NAME)".mcp since "$(ESC_PROJECT_CONFIG)" has already been changed."; \
  206.         s_SrcBase=$(ESC_DIST_BASE_DIR); \
  207.         while [ "$${s_SrcBase%%[/\\]}" != "$$s_SrcBase" ]; do \
  208.                 s_SrcBase="$${s_SrcBase%%[/\\]}"; \
  209.         done; \
  210.         if [ ! -f "$$s_SrcBase/reference/create_project.js" ]; then \
  211.                 echo "Can not found script for creating ADS project file!" 1>&2; \
  212.         else \
  213.                 cscript "$$s_SrcBase/reference/create_project.js" -ads $(ESC_PROJECT_CONFIG); \
  214.         fi; \



  215. .PHONY: projclean
  216. projclean:
  217.         @for i in $(ESC_SUB_PROJECT); do \
  218.                 if [ ! -f "$$i/Makefile" ]; then \
  219.                         cp "$(ESC_THIS_MAKEFILE)" "$$i/Makefile"; \
  220.                         make -C "$$i" force_Makefile; \
  221.                 fi; \
  222.                 make -C "$$i" projclean; \
  223.         done; \
  224.         rm -rf $(ESC_PROJECT_NAME).mcp; \
  225.         rm -rf $(ESC_PROJECT_NAME)_Data; \
  226.         mv "$(ESC_THIS_MAKEFILE)" Makefile.bak; \



  227. .PHONY: dist
  228. dist:
  229.         @\
  230.         echo "Please try:"; \
  231.         echo "    make dist.zip"; \
  232.         echo "    make dist.tar"; \
  233.         echo "    make dist.tar.gz"; \
  234.         echo "    make dist.tar.bz2"; \
  235.         echo "    make dist.7z"; \
  236.         echo "    make dist.rar";



  237. .PHONY: distclean
  238. distclean:
  239.         @\
  240.         s_DistNamePattern="_[0-9yY][0-9yY][0-9yY][0-9yY]-[0-9mM][0-9mM]-[0-9dD][0-9dD]_[0-9hH][0-9hH].[0-9mM][0-9mM]"; \
  241.         for i in zip tar tar.gz tar.bz2 7z rar; do \
  242.                 echo "Try to rm" $(ESC_PROJECT_NAME)$$s_DistNamePattern".$$i"; \
  243.                 rm -f $(ESC_PROJECT_NAME)$$s_DistNamePattern".$$i"; \
  244.         done



  245. .PHONY: dist.zip
  246. dist.zip:
  247.         @make -f "$(ESC_THIS_MAKEFILE)" assist_dist R_EXT=zip R_TOOL=zip "R_TOOL_PARAM=-r -9"



  248. .PHONY: dist.tar
  249. dist.tar:
  250.         @make -f "$(ESC_THIS_MAKEFILE)" assist_dist R_EXT=tar R_TOOL=tar "R_TOOL_PARAM=cvf"



  251. .PHONY: dist.tar.gz
  252. dist.tar.gz:
  253.         @make -f "$(ESC_THIS_MAKEFILE)" assist_dist R_EXT=tar.gz R_TOOL=tar "R_TOOL_PARAM=cvzf"



  254. .PHONY: dist.tar.bz2
  255. dist.tar.bz2:
  256.         @make -f "$(ESC_THIS_MAKEFILE)" assist_dist R_EXT=tar.bz2 R_TOOL=tar "R_TOOL_PARAM=cvjf"



  257. .PHONY: dist.7z
  258. dist.7z:
  259.         @export rtool="$$(cygpath "$$(regtool get '\HKLM\SOFTWARE\7-Zip\Path')")/7z"; \
  260.         make -f "$(ESC_THIS_MAKEFILE)" assist_dist R_EXT=7z "R_TOOL=$$rtool" "R_TOOL_PARAM=a -t7z -r -mx=9 -ms=on -mmt=on"



  261. .PHONY: dist.rar
  262. dist.rar:
  263.         @export rtool="$$(regtool get '\HKLM\SOFTWARE\Classes\WinRAR\shell\open\command\')"; \
  264.         rtool="$${rtool% *}"; \
  265.         rtool="$${rtool#\"}"; \
  266.         rtool="$${rtool%\\*.exe\"}"; \
  267.         rtool="$${rtool}\\rar"; \
  268.         rtool="$$(cygpath "$$rtool")"; \
  269.         make -f "$(ESC_THIS_MAKEFILE)" assist_dist R_EXT=rar "R_TOOL=$$rtool" "R_TOOL_PARAM=a -m5 -r -s"



  270. .PHONY: assist_dist
  271. assist_dist:
  272.         @echo Build distribution: $(ESC_PROJECT_NAME)".yyyy-mm-dd_hh.mm.$(R_EXT)".
  273.         @s_RTool=`which ${R_TOOL} 2>/dev/null`; \
  274.         if [ "$${s_RTool}" = "" ]; \
  275.                 then if [ ! -x "${R_TOOL}" ]; then echo "${R_TOOL} not found!" 1>&2; exit 1; fi; \
  276.         fi; \
  277.         if ! awk --version > /dev/null; then exit 11; fi; \
  278.         s_SrcDir="$$(pwd)"; \
  279.         :; \
  280.         echo ; \
  281.         echo "Make a temporary copy, waiting..."; \
  282.         s_DistDir="/tmp/"$(ESC_PROJECT_NAME); \
  283.         while [ "$${s_DistDir%%[/\\]}" != "$$s_DistDir" ]; do \
  284.                 s_DistDir="$${s_DistDir%%[/\\]}"; \
  285.         done; \
  286.         if [ "$$s_DistDir" = "/tmp" ]; then echo "ERROR dir: $$s_DistDir" 1>&2; exit 2; fi; \
  287.         echo "$$s_DistDir"; \
  288.         rm -rf "$$s_DistDir"; \
  289.         if ! mkdir "$$s_DistDir"; then echo "ERROR: can not make temporary dir: $$s_DistDir" 1>&2; exit 3; fi; \
  290.         s_SrcBase=$(ESC_DIST_BASE_DIR); \
  291.         while [ "$${s_SrcBase%%[/\\]}" != "$$s_SrcBase" ]; do \
  292.                 s_SrcBase="$${s_SrcBase%%[/\\]}"; \
  293.         done; \
  294.         echo "$$s_SrcBase"; \
  295.         s_Makefile_path=""; \
  296.         for i in $(ESC_DIST_FILE); do \
  297.                 while [ "$${i%%[/\\]}" != "$$i" ]; do \
  298.                         i="$${i%%[/\\]}"; \
  299.                 done; \
  300.                 s_from="$$s_SrcBase/$$i"; \
  301.                 s_to="$$s_DistDir/$$i"; \
  302.                 s_topath="$${s_to%[/\\]*}"; \
  303.                 if [ -d "$$s_from" ]; then \
  304.                         if ! mkdir -p "$$s_to"; then exit 4; fi; \
  305.                         cp -p -r -f "$$s_from/"* "$$s_to"; \
  306.                 else \
  307.                         if ! mkdir -p "$$s_topath"; then exit 5; fi; \
  308.                         cp -p -r -f "$$s_from" "$$s_to"; \
  309.                 fi; \
  310.                 if [ -d "$$s_from" ] && [ "$$(cygpath -a "$$s_from")" = $(ESC_PROJECT_PATH) ]; then \
  311.                         s_Makefile_path="$$i"; \
  312.                 elif [ -f "$$s_from" ] && [ "$$(cygpath -a "$${s_from%[/\\]*}")" = $(ESC_PROJECT_PATH) ]; then \
  313.                         s_Makefile_path="$${i%[/\\]*}"; \
  314.                 fi; \
  315.         done; \
  316.         if [ "$$s_Makefile_path" = "" ]; then s_Makefile_path="."; fi; \
  317.         echo "Verify Makefile path: $$s_DistDir/$$s_Makefile_path/$(ESC_THIS_MAKEFILE)"; \
  318.         if [ ! -f "$$s_DistDir/$$s_Makefile_path/$(ESC_THIS_MAKEFILE)" ]; then \
  319.                 echo "ERROR: $(ESC_THIS_MAKEFILE) not found after make a copy." 1>&2; \
  320.                 exit 6; \
  321.         fi; \
  322.         :; \
  323.         echo ; \
  324.         echo "Enter temporary directory."; \
  325.         if ! cd "$$s_DistDir"; then exit 7; fi; \
  326.         echo "Synchronize project files (Makefile, .mcp, etc)."; \
  327.         make -C "$$s_Makefile_path" -f "$(ESC_THIS_MAKEFILE)" proj; \
  328.         :; \
  329.         echo ; \
  330.         echo "Clean compiling results for project and sub-projects."; \
  331.         make -C "$$s_Makefile_path" -f "$(ESC_THIS_MAKEFILE)" clean; \
  332.         :; \
  333.         echo ; \
  334.         echo "Clean old distributions for project and sub-projects."; \
  335.         make -C "$$s_Makefile_path" -f "$(ESC_THIS_MAKEFILE)" distclean; \
  336.         for i in $(ESC_SUB_PROJECT); do \
  337.                 make -C "$$i" distclean; \
  338.         done; \
  339.         :; \
  340.         echo ; \
  341.         echo "Delete unreleased files ..."; \
  342.         s_dir_check="$$(pwd)"; if [ "$${s_dir_check##/tmp}" = "$$s_dir_check" ]; then \
  343.                 echo "ERROR: not in temporary directory!" 1>&2; \
  344.                 echo "Current dir: $$(pwd)" 1>&2; \
  345.                 exit 8; \
  346.         fi; \
  347.         for i in $(ESC_NO_DIST_FILE); do \
  348.                 find -regex "$$i" | awk '{gsub(/[[:space:]'\'\"']/, "\\\\&"); print; }' | xargs rm -rf ; \
  349.         done; \
  350.         :; \
  351.         echo ; \
  352.         echo "Detect last modification time ..."; \
  353.         s_ProjectTime="$$( find -type f -and -not -regex "./$(ESC_THIS_MAKEFILE)" -and -not -regex '.*\.mcp' \
  354.                 | awk '{gsub(/[[:space:]'\'\"']/, "\\\\&"); print; }' | xargs ls -b -d -lt --full-time \
  355.                 | head -n 1 2>/dev/null \
  356.                 | awk '{gsub(/\\./, ""); print;}' | awk '{$$1=$$2=$$3=$$4=$$5=$$NF=""; print;}' \
  357.                 | date -f - "+%F_%H.%M" )"; \
  358.         if [ "$$s_ProjectTime" = "" ]; then \
  359.                 s_ProjectTime="yyyy-mm-dd_hh.mm"; \
  360.         fi; \
  361.         if [ "$$s_ProjectTime" = "" ]; then \
  362.                 s_ProjectTime="yyyy-mm-dd_hh.mm"; \
  363.         fi; \
  364.         echo "$$s_ProjectTime"; \
  365.         s_ProjectName_new=$(ESC_PROJECT_NAME)"_$$s_ProjectTime"; \
  366.         s_DistDir_new="/tmp/$$s_ProjectName_new"; \
  367.         :; \
  368.         echo ; \
  369.         echo "Leave temporary directory and enter source dir."; \
  370.         if ! cd "$$s_SrcDir"; then exit 9; fi; \
  371.         :; \
  372.         echo ; \
  373.         echo "Rename the temporary copy by appending the modification time."; \
  374.         echo "$$s_DistDir -> $$s_DistDir_new"; \
  375.         if [ "$$s_DistDir_new" = "/tmp/" ]; then echo "ERROR dir: $$s_DistDir_new" 1>&2; exit 10; fi; \
  376.         rm -rf "$$s_DistDir_new"; \
  377.         { rename $(ESC_PROJECT_NAME) "$$s_ProjectName_new" "$$s_DistDir" || :; } 2>&1; \
  378.         if [ -d "$$s_DistDir" ]; then \
  379.                 echo "Rename failed! Try to use mv instread."; \
  380.                 mv "$$s_DistDir" "$$s_DistDir_new"; \
  381.         fi; \
  382.         if [ ! -d "$$s_DistDir_new" ]; then \
  383.                 echo "ERROR: temporary with time stamp not found!" 1>&2; \
  384.                 exit 11; \
  385.         fi; \
  386.         :; \
  387.         echo ; \
  388.         echo "Compress now ..."; \
  389.         if ! cd /tmp; then exit 12; fi; \
  390.         echo "${R_TOOL}" ${R_TOOL_PARAM} "$$s_ProjectName_new.${R_EXT}" "$$s_ProjectName_new"; \
  391.         if ! "${R_TOOL}" ${R_TOOL_PARAM} "$$s_ProjectName_new.${R_EXT}" "$$s_ProjectName_new"; then \
  392.                 echo "Compress failed." 1>&2; \
  393.                 exit 13; \
  394.         fi; \
  395.         rm -rf "$$s_DistDir_new"; \
  396.         if ! cd "$$s_SrcDir"; then exit 14; fi; \
  397.         mv "$$s_DistDir_new.${R_EXT}" . ; \
  398.         echo "The distribution has been built: $$s_DistDir_new.${R_EXT}"; \



  399. .PHONY: allclean
  400. allclean: clean distclean projclean



  401. .PHONY: show_proj_name
  402. show_proj_name:
  403.         @echo $(ESC_PROJECT_NAME)



  404. .PHONY: show_sub_proj_path
  405. show_sub_proj_path:
  406.         @for i in $(ESC_SUB_PROJECT); do echo "$$i"; done



  407. .PHONY: show_dist_include
  408. show_dist_include:
  409.         @echo $(ESC_DIST_BASE_DIR)" :"; \
  410.         for i in $(ESC_DIST_FILE); do echo "$$i"; done



  411. .PHONY: show_dist_exclude
  412. show_dist_exclude:
  413.         @echo $(ESC_DIST_BASE_DIR)" :"; \
  414.         for i in $(ESC_NO_DIST_FILE); do echo "$$i"; done



  415. .PHONY: show_source
  416. show_source:
  417.         @for i in $(ESC_LINK_SOURCE); do echo "$$i"; done



  418. .PHONY: help
  419. help:
  420.         @\
  421.         echo ""; \
  422.         echo "Targets that includes sub-projects:"; \
  423.         echo "  make build              build this project"; \
  424.         echo "  make clean              clean compiling result"; \
  425.         echo "  make proj               re-create the project file: (Makefile, .mcp)"; \
  426.         echo "  make projclean          clean the project file"; \
  427.         echo ""; \
  428.         echo "Targets that excludes sub-projects:"; \
  429.         echo "  make dist               display all distribution format supported"; \
  430.         echo "   -> make dist.<ext>     build distribution with the format marked by <ext>"; \
  431.         echo "  make distclean          clean the dist result"; \
  432.         echo "  make allclean           do clean, projclean & distclean"; \
  433.         echo "  make show_proj_name     display name of this project"; \
  434.         echo "  make show_sub_proj_path display sub-projects' path"; \
  435.         echo "  make show_dist_include  display the included files in building distribution"; \
  436.         echo "  make show_dist_exclude  display the excluded files in building distribution"; \
  437.         echo "  make show_source        display source in this project"; \
  438.         echo "  make help               display this help"; \



  439. depend:
  440.         @echo "Re-build dependencies."; \
  441.         makedepend -f$(ESC_THIS_MAKEFILE) -w1 -Y -- $(subst -I,-O,$(CFLAGS)) -- $(ESC_LINK_SOURCE) 2>/dev/null; \
  442.         rm -f $(ESC_THIS_MAKEFILE).bak


复制代码


project.cfg文件

  1. PROJECT_NAME = project_name



  2. LINK_SOURCE=source.c
  3. LINK_SOURCE_GCC=source_only_in_gcc.c
  4. LINK_SOURCE_ADS=source_only_in_ads.c



  5. DIST_BASE_DIR=..
  6. DIST_FILE=.
  7. DIST_FILE=./reference/$(THIS_MAKEFILE)



  8. NO_DIST_FILE=.*\.bak
  9. NO_DIST_FILE=.*~
  10. NO_DIST_FILE=.*\.o
  11. NO_DIST_FILE=.*_Data
  12. NO_DIST_FILE=.*/Thumbs.db


  13. SUB_PROJECT=sub_project
复制代码


。。。。。该Makefile对大家不修改没什么用处啦。。。

[ 本帖最后由 飞灰橙 于 2007-3-15 16:20 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-03-15 16:38 |只看该作者
太复杂?都没人顶

论坛徽章:
0
3 [报告]
发表于 2007-03-15 16:45 |只看该作者
老大,眼睛花了

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2007-03-15 16:46 |只看该作者
太复杂了,加上注释,好给你加精。

论坛徽章:
0
5 [报告]
发表于 2007-03-15 16:46 |只看该作者
另外我的Makefile有解决你说的多目录的问题,你可以参考一下

论坛徽章:
0
6 [报告]
发表于 2007-03-15 16:47 |只看该作者
确实是太复杂了,我觉得whyglinux的就足够好了...但是还有几个问题要解决,等他来我问他.

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2007-03-15 16:48 |只看该作者
原帖由 converse 于 2007-3-15 16:47 发表
确实是太复杂了,我觉得whyglinux的就足够好了...但是还有几个问题要解决,等他来我问他.


用autotools生成的也不错,呵呵。我还是比较倾向与自动生成。

论坛徽章:
0
8 [报告]
发表于 2007-03-15 16:49 |只看该作者
原帖由 mq110 于 2007-3-15 16:46 发表
太复杂了,加上注释,好给你加精。


谢谢老大好意!加精就不要了,代码晦涩不清,模块层次不鲜明。
贴出来只是自恋一下。。

论坛徽章:
0
9 [报告]
发表于 2007-03-15 16:51 |只看该作者
原帖由 net_robber 于 2007-3-15 16:46 发表
另外我的Makefile有解决你说的多目录的问题,你可以参考一下


是每个目录下一个Makefile的那种吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP