2020年9月3日 星期四

Makefile 筆記 (2)

Makefile 範本 (OS: Linux)

    這個 Makefile 有結合 .c 跟 .cpp 檔案, 並且使用一些字串處理 function。
    # gcc compiler 參數
    CC      := gcc
    CFLAGS  := -g -Wall -Werror -std=c99
    # g++ compiler 參數
    CXX     := g++
    CXXFLAG := -Wall -Werror -std=c++17


    # 宣告 source 資料夾
    SRC_DIRS = ./source
    # 把 source 資料夾裡的 cpp 跟 c 全部找出來
    SRCS := $(shell find $(SRC_DIRS) -name "*.cpp" -or -name "*.c")
    # 取檔名並把副檔名加上 .o
    OBJS := $(addsuffix .o,$(notdir $(SRCS))) main.o

    # include 參數 (適用於多個 include 資料夾, 成果會是 gcc -I/dir1 I/dir2)
    INC_DIRS  := ./include 
    INC_FLAGS := $(addprefix -I,$(INC_DIRS))

    all: program

    program: $(OBJS)
        $(CXX) $(CXXFLAG) $(OBJS) -o $@ 

    main.o: main.cpp
        $(CXX) $(INC_FLAGS) $(CXXFLAG) -c $< -o $@

    # .cpp.o 找 .cpp 編譯
    %.cpp.o: $(SRC_DIRS)/%.cpp
        $(CXX) $(INC_FLAGS) $(CXXFLAG) -c $< -o $@

    # .c.o 找 .c 編譯
    %.c.o: $(SRC_DIRS)/%.c
        $(CC)  $(INC_FLAGS) $(CFLAGS) -c $< -o $@

    .PHONY: clean

    clean:
        rm -rf ${OBJS} program
相關文章 :

Related Posts:

  • C 語言 - unsigned char char 與 unsigned char 的區別     單看兩個變數類型是沒有差別的, char -128 ~ 127, unsigned char 0 ~ 255,範圍大小一樣,並沒差別。唯一差別是在賦值的時候。 賦值的時候 char 與 unsigned char 的區別     (signed) char 有符號 bit ,這會導致你在賦予值時,(signed) char 會依照情況去… Read More
  • C 語言 - __attribute__((weak)) 使用的情境     假設我們不知道外部是否會提供 foo() 這個 function,若沒有則用自己的 foo()。 extern int func(void); int __attribute__((weak)) func(void) { return 0; } 備註 - 不會在動態函式庫 (.so) 中生效     string.so voi… Read More
  • C 語言 - static static - Introduction      靜態變數(Static Variable)在電腦編程領域指在程式執行前系統就為之靜態分配(也即在執行時中不再改變分配情況)儲存空間的一類變數。與之相對應的是在執行時只暫時存在的自動變數(即局部變數)與以動態分配方式取得儲存空間的一些物件,其中自動變數的儲存空間在呼叫棧上分配與釋放。 static + 變數        … Read More
  • C 語言 - #define # define - 文本替換 #define Max 10 # define - 定義函式 #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define MINUS(a,b) a - b // 注意這個 a-b 沒加括號很容易出錯 #define MINUS(a,b) (a - b) // Good. # define - 多行定義 #define M… Read More
  • Python Windows 換行符號與 Unix 換行轉換 ( convert CRLF to LF ) Convert CRLF to LF def convertCRLFtoLF(self, filename): WINDOWS_LINE_ENDING = b'\r\n' UNIX_LINE_ENDING = b'\n' with open(filename, "rb") as f: content = f.read() … Read More

0 意見:

張貼留言

Popular Posts