###########################################
#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在配置有时候会一些细微不同,需要注意。

Linux Makefile简单模板的更多相关文章

  1. Linux makefile 教程 非常详细,且易懂(转)

    转自:http://blog.chinaunix.net/uid-27717694-id-3696246.html 原文地址:Linux makefile 教程 非常详细,且易懂 作者:Deem_pa ...

  2. 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序

    很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用m ...

  3. Linux Makefile文件编写详细步骤与实践

    Linux Makefile文件编写详细步骤与实践 1.makefile概述 Windows环境下IDE会帮你完成makefile文件的编写,但在UNIX环境下你就必须自己写makefile了,会不会 ...

  4. Linux 下 简单客户端服务器通讯模型(TCP)

    原文:Linux 下 简单客户端服务器通讯模型(TCP) 服务器端:server.c #include<stdio.h> #include<stdlib.h> #include ...

  5. Gcc的Makefile简单使用

    Gcc的Makefile简单使用http://blog.chinaunix.net/uid-9330295-id-2425867.html

  6. Linux的简单介绍和常用命令的介绍

    Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...

  7. 从零单排Linux – 1 – 简单命令

    从零单排Linux – 1 – 简单命令 Posted in: Linux 从零单排Linux – 1 一.Linux的简单命令: 1.忘记root密码: 读秒时按任意键进入 – e – ↓选择第二个 ...

  8. Linux下简单的socket通信实例

    Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Br ...

  9. Linux Makefile自动生成--config.h

    Linux Makefile自动生成--config.h http://blog.csdn.net/spch2008/article/details/12510805

随机推荐

  1. JVM调优之---一次GC调优实战

    某系统反馈『性能抖动,响应时间会突然飙高,TP999 MAX会到3000+』,初步怀疑是JVM FULL GC导致的 STW,观察FULL GC日志默认的JVM参数: -Xms4096m -Xmx40 ...

  2. pannel加载form

    panel2.Controls.Clear(); frm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; frm.ShowIc ...

  3. numRecordsIn 在哪里实现?

    /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreem ...

  4. AI 技术咖们说,进入未来世界首先需要一个“虚拟的我” | 科技生活节倒计时8天

    http://www.tmtpost.com/3367762.html 未来世界是什么样子? 斯皮尔伯格在<头号玩家>中构建了一个充满科技感.富有浓烈浪漫主义色彩的虚拟世界.戴上VR眼镜, ...

  5. 【教程】linux下安装Google Chrome

    google chrome       google浏览器一直都是深受大家喜爱的一个浏览器,而且其跨平台性比较好,这对于书签同步来说是非常重要的.但是在linux下,默认的是火弧浏览器,而google ...

  6. Android.mk遍历子目录所有文件

    转:http://blog.csdn.net/langresser_king/article/details/8272736 define all-cpp-files-under$(patsubst ...

  7. 命令生成和运行android项目

    转自:http://wiki.dourok.info/doku.php/%E7%BC%96%E7%A0%81/android/%E5%91%BD%E4%BB%A4%E8%A1%8C%E7%94%9F% ...

  8. VS2013 未找到与约束ContractName ...

    控制面板>程序>程序和功能 找到如下选中软件右击修复 即可 需关闭VS2013 参考:http://blog.csdn.net/zhaoyun927/article/details/298 ...

  9. Ubuntu 系统下卸载 IntelliJ IDEA

    参考:http://blog.csdn.net/csdnones/article/details/50449947 卸载只需要删除解压出来的目录就行了,然后删除/home/你用登录名/IntelliJ ...

  10. idea 项目添加web支持

    选中项目添加 add - web