小碼哥

          誰謂河廣,一葦杭之

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            7 隨筆 :: 17 文章 :: 74 評論 :: 0 Trackbacks

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          訂閱Canvas

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          幾個簡單適合小程序的Makefile,可直接拷貝使用,自己mark一下,這樣長時間不用Makefile也不用去看手冊了

          0.只有一個文件
          # 變量的定義,方便使用
          CC      
          = gcc
          CCFLAGS 
          = -O2 -s
          BIN     
          = test
          OBJ     
          = root_password_tool_win32.o

          $(BIN) : $(OBJ)
              $(CC) $(CCFLAGS) 
          -o test $(OBJ)

          $(OBJ) : root_password_tool_win32.c
              $(CC) $(CCFLAGS) 
          -c root_password_tool_win32.c

          .PHONY : clean
          clean :
              
          -rm $(BIN) $(OBJ)



          1.簡單編譯命令行程序,$(CC)前面是tab,不是space

          一共五個文件:
          test.c
          md5.c md5.h
          password.c password.h

          main函數在test.c中,test.c文件include了md5.h和password.h

          CC      = gcc
          CCFLAGS 
          = -O2 -s
          BIN     
          = password
          OBJ     
          = md5.o password.o test.o

          $(BIN) : $(OBJ)
              $(CC) $(CCFLAGS) 
          -o password $(OBJ)

          md5.o : md5.c md5.h
              $(CC) $(CCFLAGS) 
          -c md5.c

          password.o : password.c password.h
              $(CC) $(CCFLAGS) 
          -c password.c

          test.o : test.c
              $(CC) $(CCFLAGS) 
          -c test.c

          .PHONY : clean
          clean :
              
          -rm $(BIN) $(OBJ)

          make            # 編譯得到password.exe,這里在windows下cigwin+mingw環境中編譯
          make clean    # 清理編譯生成的*.o等文件

          2.使用g++編譯win32程序的Makefile,其中簡寫了一些,可以對比1看看不同之處
          說明:
              (0)指定靜態庫目錄,連接靜態庫libcomctl32.a編譯程序
              (1)編譯windows資源文件(使用mingw的windres)
              (2)使用-mwindows編譯選項去除彈出的cmd窗口
          CC      = g++

          -O2       : optimization option
          -s        : build small binary
          -mwindows : use this option to remove the popping cmd window
          CCFLAGS 
          = -O2 --mwindows
          BIN     
          = test
          WINDRES 
          = windres
          RES     
          = resource.o
          OBJ     
          = main.o md5.o password.o $(RES)

          # where is your mingw library
          ?
          LIBPATH 
          = 'C:\Program Files\CodeBlocks\MinGW\lib\'

          LIBS
          =-L$(LIBPATH) -lcomctl32

          RM      
          = -rm 

          $(BIN): $(OBJ)
              $(CC) $(CCFLAGS) 
          -o $(BIN) $(OBJ) $(LIBS)

          main.o: main.cpp

          md5.o: md5.cpp md5.h

          password.o: password.cpp password.h

          # 編譯資源文件
          $(RES): resource.rc rpt.ico manifest
              $(WINDRES) 
          -o $(RES) resource.rc

          .PHONY:clean
          clean:
              $(RM) $(BIN) $(OBJ)


          3.編譯靜態庫
          其中一些$<,$^, $@是Makefile的自動化變量,詳細了解可以看《跟我一起寫Makefile》的第五章
          CC            = g++
          OBJS         = utp.o utp_utils.o

          -g : for debug
          CFLAGS        
          = --O2 -Wall -DPOSIX
          TARGET        
          = libutp.a

          .cpp.o:
              $(CC) 
          -c $(CFLAGS) $<
              
          all: $(TARGET)

          libutp.a: $(OBJS)
              ar cru $@ $
          ^
              ranlib $@
              
          .PHONY : clean
          clean :
              
          -rm *.o $(TARGET)

          4.編譯動態庫
          (0)windows下使用mingw編譯dll動態庫
          CC      = g++
          OBJS    = utp.o utp_utils.o
          CCFLAGS = -fno-exceptions -fno-rtti -Wall -g -lwsock
          TARGET  = libutp.dll

          all: $(TARGET)

          $(TARGET): $(OBJS)
              -rm -f $(TARGET)
              $(CC) -shared -o $(TARGET) $(OBJS) -lws2_32

          .cpp.o:
              $(CC) -c -DPOSIX -fpic -I . -I utp_config_lib $(CCFLAGS) $<

          .PHONY: clean
          clean:
              -rm -f $(OBJS) $(TARGET)

          (1)linux下編譯so動態庫
          CC      = g++
          OBJS    
          = utp.o utp_utils.o
          CCFLAGS 
          = -fno-exceptions -fno-rtti -Wall -g
          TARGET  
          = libutp.so

          all: $(TARGET)

          $(TARGET): $(OBJS)
              
          -rm -f $(TARGET)
              g
          ++ -shared -o $(TARGET) $(OBJS)

          .cpp.o:
              g
          ++ --DPOSIX -fpic -I . -I utp_config_lib $(CCFLAGS) $<

          .PHONY: clean
          clean:
              
          -rm -f $(OBJS) CCFLAGS


          5.編譯多個目標,0-2均是編譯單個目標
          (0) 添加頭文件目錄
          (1) 使用自己編譯的靜態庫libutp.a
          CC          = g++ 
          CFLAGS      
          = -g
          LIBUTP_PATH 
          = /home/actiontec/workspace/code_reading/third_party/libutp/lib
          INCLUDES    
          = -I${LIBUTP_PATH}
          LIBS        
          = -L$(LIBUTP_PATH) -lutp -lpthread -lrt
          TARGET      
          = all

          all: server client

          server: server.cpp
              $(CC) $(CFLAGS) 
          -o $@ $^ $(INCLUDES) $(LIBS)

          client: client.cpp
              $(CC) $(CFLAGS) 
          -o $@ $^ $(INCLUDES) $(LIBS)

          .PHONY : clean
          clean:
              
          -rm *.o server client
          以上僅供參考
          posted on 2012-11-06 15:05 小碼哥 閱讀(5124) 評論(0)  編輯  收藏 所屬分類: linuxC語言

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 乐昌市| 拜城县| 富宁县| 安阳县| 建昌县| 和田县| 庆云县| 永城市| 临西县| 无为县| 佛冈县| 资兴市| 阿克陶县| 长岛县| 余江县| 睢宁县| 东乌珠穆沁旗| 台湾省| 镇坪县| 永城市| 五台县| 乐都县| 平果县| 鲁山县| 长白| 深圳市| 临西县| 荣昌县| 怀来县| 巴南区| 泾源县| 胶南市| 达日县| 洛宁县| 通江县| 庆阳市| 西贡区| 丹凤县| 西藏| 英吉沙县| 乾安县|