• Linux Makefile简单模板


    ###########################################
    #Makefile for simple programs
    ###########################################
    INC=
    LIB=-lpthread
    CC=gcc
    CXX=g++
    LINK=g++
    
    #-fpermissive:表示兼容老语法
    C_FLAGS= -g -Wall -fpermissive -std=c11
    CXX_FLAGS= -g -Wall -fpermissive -std=c++11
    INC_PATH= -I ./ -I ./kenlm -I ./kiss_fft130 -I ./iniparser2/src
    LIB_PATH=-L ./
    EXT_LIB= -Wl,-rpath ./ -ltensorflow -lkenlm -lkenlm_util -lkenlm_builder -lkenlm_filter -lkenlm_interpolate -lbz2 -lz -llzma -pthread
    
    PRG=test
    
    SRCS=$(wildcard *.c)
    SRCS+=$(wildcard *.cpp)
    
    C_OBJS=$(patsubst %.c,%.o,$(wildcard *.c))
    CXX_OBJS=$(patsubst %.cpp,%.o,$(wildcard *.cpp))
    
    
    all:$(PRG)
    
    #链接的时候需要库文件
    $(PRG):$(CXX_OBJS) $(C_OBJS)
        $(LINK) $^ $(LIB_PATH) $(EXT_LIB) -o $@
    
    #编译的时候需要头文件
    %.o:%.cpp
        $(CXX) $(CXX_FLAGS) -c $< $(INC_PATH) -o $@
    
    %.o:%.c
        $(CC) $(C_FLAGS) -c $< $(INC_PATH) -o $@
    
    .PRONY:clean
    clean:
        @echo "Removing linked and compiled files......"
        rm -rf $(PRG) $(CXX_OBJS) $(C_OBJS)
        
    -I(大写i),添加包含路径
    -I在编译时用,告诉编译器去哪个路径下找文件
    如:-I /home/hello/include
    表示将/home/hello/include目录作为第一个寻找头文件的目录。
    编译器的寻找顺序是:/home/hello/include-->/usr/include-->/usr/local/include。
    如果在/home/hello/include中有个文件hello.h,则在程序中用#include<hello.h>就能引用到这个文件。 可以加多个包含路径,编译器的寻找顺序为添加的顺序。
    -l(小写L),添加引用链接库
    -l在链接时用到,它的作用是告诉链接器,要用到哪个库。
    如:-lpthread
    告诉链接器(linker),程序需要链接pthread这个库,这里的pthread是库名不是文件名,具体来说文件句是libpthread.so。
    -L,添加链接库路径
    -L 后跟路径,告诉链接器从哪找库(.so文件或者.a文件),只有在链接时会用到。
    如:-L /home/hello/lib
    表示将/home/hello/lib目录作为第一个寻找库文件的目录,寻找顺序是:/home/hello/lib-->/usr/lib-->/usr/local/lib。
    可以加多个包含路径,链接器的寻找顺序为添加的顺序。
    -Wl,rpath,添加运行时库路径
    -Wl,rpath 后面也是路径,运行的时候用。这条编译指令会在编译时记录到target文件中,所以编译之后的target文件在执行时会按这里给出的路径去找库文件。
    如:-Wl,rpath=/home/hello/lib
    表示将/home/hello/lib目录作为程序运行时第一个寻找库文件的目录,程序寻找顺序是:/home/hello/lib-->/usr/lib-->/usr/local/lib。
    可以加多个包含路径,程序在运行时的寻找顺序为添加的顺序。
    -L是编译路径,-Wl,rpath是运行路径,在配置工程的时候为了标准化,编译出的target(.so或是可执行文件)
    不一定跟源文件(main.cpp,XX.cpp)放在一个文件夹下。如不在一个文件夹下,在编译时,-L后面跟的是相对
    于源文件的路径,-Wl,rpath后面跟的是相对于target(.so或是可执行文件)的路径,确切来说是相对于工作
    目录的路径。不同的IDE在配置有时候会一些细微不同,需要注意。
  • 相关阅读:
    Python 自动化测试实战训练营,由浅入深,从小白到测试高手!
    接口测试 Mock 实战(二) | 结合 jq 完成批量化的手工 Mock
    从文科生转行测试,再到大厂测试开发工程师,我是如何做到的?
    严正声明|严厉打击盗版侵权、非法销售「霍格沃兹测试学院」课程的违法行为
    「金羽毛」有奖征文 | 记录测试开发技术进阶之路的点滴
    测试工程师职业发展漫谈
    Workshop 深圳站|实战+源码架构剖析带你揭开Appium的神秘面纱
    那些难改的 Bug,最后都怎样了?
    BAT大厂都在用的Docker。学会这三招,面试、工作轻松hold住
    2021 开年学习送福利,助力测试进阶提升!
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/9255721.html
Copyright © 2020-2023  润新知