<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    小碼哥

    誰謂河廣,一葦杭之

       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      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 小碼哥 閱讀(5116) 評論(0)  編輯  收藏 所屬分類: linuxC語言

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲色爱图小说专区| 久久久久亚洲av毛片大| 亚洲网站免费观看| 久久久久久久99精品免费| 亚洲精品乱码久久久久久| a级毛片在线免费观看| 国产AV无码专区亚洲A∨毛片| 久久嫩草影院免费看夜色| 久久精品国产亚洲AV不卡| 中文无码日韩欧免费视频| 狠狠色伊人亚洲综合成人| 免费在线中文日本| 亚洲白嫩在线观看| 成人毛片免费播放| 久久精品熟女亚洲av麻豆| 亚洲第一黄片大全| 国色精品va在线观看免费视频 | 91成人免费福利网站在线| 亚洲gv白嫩小受在线观看| 亚洲电影免费观看| 亚洲欧美日韩一区二区三区| 午夜亚洲国产成人不卡在线| 人妻免费一区二区三区最新| 亚洲日韩乱码中文无码蜜桃| 女人18毛片水真多免费播放| 羞羞视频免费观看| 久久亚洲综合色一区二区三区 | 亚洲精品视频免费看| 免费黄色毛片视频| 精品国产免费一区二区三区| 亚洲一区二区电影| 国产免费观看黄AV片| 中文字幕在线成人免费看| 亚洲国产中文在线二区三区免| 在线a毛片免费视频观看| 伊人久久国产免费观看视频| 亚洲成电影在线观看青青| 免费大香伊蕉在人线国产 | 亚洲国产精品午夜电影| 免费在线黄色网址| 每天更新的免费av片在线观看|