• makefile编译举例


    makefile编译举例

    # 定义编译器和编译选项  
    CC = gcc  
    CFLAGS = -Wall -Werror  
      
    # 定义目标文件名  
    TARGET = myprogram  
      
    # 定义需要编译的源文件目录和文件名  
    SRC_DIR1 = src1  
    SRC_DIR2 = src2  
      
    OBJ_DIR1 = obj1  
    OBJ_DIR2 = obj2  
      
    SRC_FILES1 = file1.c file2.c  
    SRC_FILES2 = file3.c file4.c  
      
    OBJ_FILES1 = $(addprefix $(OBJ_DIR1)/, $(notdir $(patsubst %.c, %.o, $(SRC_FILES1))))  
    OBJ_FILES2 = $(addprefix $(OBJ_DIR2)/, $(notdir $(patsubst %.c, %.o, $(SRC_FILES2))))  
      
    # 默认目标,编译可执行文件  
    all: $(TARGET)  
      
    # 编译目标文件  
    $(TARGET): $(OBJ_FILES1) $(OBJ_FILES2)  
     $(CC) $(OBJ_FILES1) $(OBJ_FILES2) -o $(TARGET)  
      
    # 编译源文件  
    $(OBJ_DIR1)/%.o: $(SRC_DIR1)/%.c  
     mkdir -p $(dir $@)  
     $(CC) $(CFLAGS) -c $< -o $@  
      
    $(OBJ_DIR2)/%.o: $(SRC_DIR2)/%.c  
     mkdir -p $(dir $@)  
     $(CC) $(CFLAGS) -c $< -o $@  
      
    # 清除生成的目标文件和可执行文件  
    clean:  
     rm -rf $(OBJ_DIR1)/* $(OBJ_DIR2)/* $(TARGET)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    这个Makefile中,我们定义了以下内容:

    CC和CFLAGS变量分别指定编译器和编译选项。
    TARGET变量定义了生成的可执行文件的文件名。
    SRC_DIR1和SRC_DIR2变量定义了源文件的目录。
    OBJ_DIR1和OBJ_DIR2变量定义了目标文件的目录。
    SRC_FILES1和SRC_FILES2变量定义了源文件的文件名。
    OBJ_FILES1和OBJ_FILES2变量定义了目标文件的文件名。
    all是默认目标,它依赖于$(TARGET)目标,用于编译生成可执行文件。
    ( T A R G E T ) 目标依赖于 (TARGET)目标依赖于 (TARGET)目标依赖于(OBJ_FILES1)和$(OBJ_FILES2)目标,它使用编译器将目标文件链接成可执行文件。

  • 相关阅读:
    买卖股票的最佳时机
    centos环境上:k8s 简单安装教程
    Next.js 热更新 Markdown 文件变更
    并查集(Union-Find)
    47-用户和权限管理
    Acwing1015. 摘花生
    【RabbitMQ】——消息应答
    如何自动关闭Oracle数据库服务并重启服务器
    .NET(C#) 如何配置用户首选项及保存用户设置
    Jmeter中http请求时加HTTP Cookie管理器,cookie不生效问题
  • 原文地址:https://blog.csdn.net/techenliu/article/details/133688300