• 原来Linux makefile可以如此简单


    作者:朱金灿
    来源:clever101的专栏

      原来以为Linux makefile挺复杂的,直到从网上找到一个编译模板,发现Linux makefile是如此简单,而且你还可以根据该模板实现C程序和C++程序的混合编译。下面是Linux makefile模板的脚本代码:

    # 指定c编译器
    CC = gcc
    # 指定C++编译器
    C++ = g++
    # 指定链接器
    LINK = g++
    
    # 指定包含头文件路径
    INCLUDES = -I. -I"/opt/ThirdPartyLib/pugixml/include" -I"/opt/ThirdPartyLib/libcurl/include" -I"/opt/ThirdPartyLib/hdf4/include" -I"/opt/ThirdPartyLib/hdf-eos2-3.0/include"
    
    # 指定包含的库文件路径及对应的库文件
    LIBS = -L"/opt/ThirdPartyLib/pugixml/lib" -lpugixml -lsqlite3 -L"/opt/ThirdPartyLib/libcurl/lib" -lcurl 
    # 设置c程序编译选项
    CCFLAGS = -Wl,--rpath=./:/opt/ThirdPartyLib/libcurl/lib -DHAVE_STRUCT_TIMEVAL -DHAVE_RECV -DHAVE_SEND -DHAVE_STDBOOL_H -DHAVE_BOOL_T -DSTDC_HEADERS -DHAVE_FCNTL_H -DHAVE_FCNTL_O_NONBLOCK -DHAVE_UNISTD_H -DHAVE_SYS_STAT_H -DHAVE_SYS_TYPES_H -c -g -fPIC
    # 设置c++程序编译选项
    C++FLAGS =-Wl,--rpath=./:/opt/ThirdPartyLib/libcurl/lib -DHAVE_STRUCT_TIMEVAL -DHAVE_RECV -DHAVE_SEND -DHAVE_STDBOOL_H -DHAVE_BOOL_T -DSTDC_HEADERS -DHAVE_FCNTL_H -DHAVE_FCNTL_O_NONBLOCK -DHAVE_UNISTD_H -DHAVE_SYS_STAT_H -DHAVE_SYS_TYPES_H -std=c++11 -c -g -fPIC
    # 指定编译输出文件路径
    TARGET=/opt/Program/bin/demo
    # 指定编译的c++源码文件
    C++FILES = DatabaseOperation.cpp DownloadData.cpp
    # 指定编译的c源码文件
    CFILES = dynbuf.c curl_multibyte.c nonblock.c slist_wc.c strtoofft.c tool_binmode.c \
    tool_writeout.c tool_writeout_json.c warnless.c 
    # 指定目标文件
    OBJFILE = $(CFILES:.c=.o) $(C++FILES:.cpp=.o)
    
    all:$(TARGET)
    
    $(TARGET):$(OBJFILE)
    	$(LINK) $^ $(LIBS) -Wl,--rpath=/opt/MonitoringDroughtProgram/bin:/opt/ThirdPartyLib/pugixml/lib:/opt/ThirdPartyLib/libcurl/lib -fPIE -o $@
    
    %.o:%.c
    	$(CC) -o $@ $(CCFLAGS) $< $(INCLUDES)
    
    %.o:%.cpp
    	$(C++) -o $@ $(C++FLAGS) $< $(INCLUDES)
    # 安装命令选项
    install:
    	tsxs -i -o $(TARGET)
    # 清理中间编译文件选项
    clean:
    	rm -rf $(TARGET)
    	rm -rf $(OBJFILE)
    
    • 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
    • 40
    • 41
    • 42
    • 43

      从上面可以看出一个标准Linux makefile的脉络是相当清晰的,大概可以分为以下几部分:指定编译器(c编译器或者C++编译器),指定的包含的头文件路径以及库文件路径以及对应的库文件、设置c程序编译选项、设置c++程序编译选项、指定编译的c++或c源码文件、指定编译输出文件路径和指定目标文件,其它部分基本照抄就行。
    参考文献:
    1.Linux下的C/C++ 混合编译

  • 相关阅读:
    Java中的排序接口Comparable和比较器Comparator详解
    leetcode646. 最长数对链(java)
    【Docker】Docker-compose及Consul多容器编排工具
    【C++笔试强训】第二天
    uni.getSystemInfo(OBJECT)
    「实践篇」解决微前端 single-spa 项目中 Vue 和 React 路由跳转问题
    辣条也玩高端局?单品年销10亿,麻辣王子如何通过极致产品力突围?
    【Android开发】内存泄露
    华纳云:如何使用Docker进行有效的日志管理?
    C#的Winform程序关于单击和双击的区别 - 开源研究系列文章
  • 原文地址:https://blog.csdn.net/clever101/article/details/134019170