这是我自己写的一份makefile文件,最简单的一个

BSoftInst: BSoftInst.cpp ReadXML.cpp main.cpp ireg.cpp ntreg.cpp SoftwareInst.cpp

g++ -o BSoftInst BSoftInst.cpp ReadXML.cpp main.cpp ireg.cpp ntreg.cpp SoftwareInst.cpp -Wformat -fpermissive -I/usr/include/libxml2 -L/usr/lib/i386-linux-gnu -lxml2 -lguestfs

1.makefile的书写规则为

target ... : prerequisites ...

[Tab] command

target是需要要生成的目标文件

prerequisites是生成目标所依赖的文件

command是命令,其开头需要是一个tab,而不是一系列空格

2.变量的使用

关于编译程序,和编译选项,我们是可以使用变量指定的,这样方便维护,特别当你的工程很大的时候

如可以改成下面这个形式

#Which compiler

CC = g++

#Where are include files kept

INCLUDE = .

#Options for development

CFLAGS = -g -Wall -ansi -Wformat -fpermissive -I/usr/include/libxml2 -L/usr/lib/i386-linux-gnu -lxml2 -lguestfs

#Options for release

#CFLAGS = -O -Wall -ansi

BSoftInst: BSoftInst.cpp ReadXML.cpp main.cpp ireg.cpp ntreg.cpp SoftwareInst.cpp

$(CC) -o BSoftInst BSoftInst.cpp ReadXML.cpp main.cpp ireg.cpp ntreg.cpp SoftwareInst.cpp

3.完整的依赖关系

之前的版本,是把所有.cpp文件都罗列在一块了,没有清晰的罗列出来他们之间的依赖关系。

我是为了偷懒,但是当文件很多是,这种方式就不行了。需要想下面那样罗列他们之间的关系

BSoftInst: BSoftInst.o ReadXML.o main.o ireg.o ntreg.o SoftwareInst.o

$(CC) -o $@ BSoftInst.o ReadXML.o main.o ireg.o ntreg.o SoftwareInst.o

BSoftInst.o: BSoftInst.cpp BSoftInst.h ReadXML.h

ReadXML.o: ReadXML.cpp ReadXML.h

main.o: main.cpp ireg.h BSoftInst.h ReadXML.h

ireg.o: ireg.cpp ireg.h ntreg.h

ntreg.o: ntreg.cpp ntreg.h

SoftwareInst.o: SoftwareInst.cpp SoftwareInst.h

也可以在依赖关系的后面加上编译命令,如

BSoftInst.o: BSoftInst.cpp BSoftInst.h ReadXML.h

g++ -c BSoftInst.cpp BSoftInst.h ReadXML.h

4.伪目标的使用

这个编译过程会产生很多临时文件,如大量的.o文件,需要删除,我们可以在makefile文件中

这样写

clean:

rm -f *.o

这两行也符合makefile的规则(

target+

prerequisites+

command),只不过其中的依赖关系(

prerequisites

)没有了。clean被称为伪目标。

“伪目标”并不是一个文件,只是一个标签,

由于“伪目标”不是文件,所以make无法生成它的依赖关系和决定它是否要执行。我们只有

通过显示地指明这个“目标”才能让其生效。

在命令行输入make clean 后就会执行删除操作了。

当然,“伪目标”的取名不能和文件名重名,为了确保不重名,需要这样做

.PHONY : clean

只要有这个声明,

不管是否有

“clean”

文件,

要运行

“clean”

这个目标, “make clean”就可以执行之后的命令。

5.默认目标

Makefile中的第一个目标会被作为其默认目标,我们会声明一个伪目标在文件开头,像这样

all : BSoftInst

这样输入make,就相当于执行make BSoftInst。当你的makefile文件中有好多个目标的时候,会很有用。如果你想输入make一口气编译多个目标需要这样做

all : prog1 prog2 prog3

.PHONY : all

prog1 : prog1.o utils.o

cc -o prog1 prog1.o utils.o

prog2 : prog2.o

cc -o prog2 prog2.o

prog3 : prog3.o sort.o utils.o

cc -o prog3 prog3.o sort.o utils.o

6.对于makefile,我也就知道这么多了。

cmake的简单使用

1.简单使用

kdevelop4目前就使用的是cmake,cmake需要CMakeLists.txt

下面是我的kdevelop生成的一个CMakeLists.txt文件,看上去写一个

CMakeLists.txt要比写makefile简单的多。

project(analysisreg2)

add_executable(analysisreg2 main.cpp ntreg.cpp edlib.cpp)

PROJECT 指令的语法是:

PROJECT(projectname [CXX] [C] [Java])

你可以用这个指令定义工程名称,并可指定工程支持的语言,支持的语言列表是可以忽略的,

默认情况表示支持所有语言。

ADD_EXECUTABLE(analysisreg2 main.cpp ntreg.cpp edlib.cpp)

定义了这个工程会生成一个文件名为 hello 的可执行文件,后面的参数是其依赖的源文件

cmake会生成一个makefile,而且会针对不同平台生成不同的makefile。

2.变量的使用

PROJECT (Analysisreg2)

SET(SRC_LIST main.cpp ntreg.cpp edlib.cpp)

MESSAGE(STATUS "This is BINARY dir " ${Analysisreg2_BINARY_DIR})

MESSAGE(STATUS "This is SOURCE dir "${Analysisreg2_SOURCE_DIR})

ADD_EXECUTABLE(analysisreg2 SRC_LIST)

SET 指令的语法是:

SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])

现阶段,你只需要了解 SET 指令可以用来显式的定义变量即可。

比如我们用到的是 SET(SRC_LIST

main.c),如果有多个源文件,也可以定义成:

SET(SRC_LIST main.c t1.c t2.c)

MESSAGE 指令的语法是:

MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display"

...)

这个指令用于向终端输出用户定义的信息,包含了三种类型:

SEND_ERROR,产生错误,生成过程被跳过。

SATUS,输出前缀为—的信息。

FATAL_ERROR,立即终止所有 cmake 过程.

我们在这里使用的是 STATUS 信息输出,演示了由 PROJECT 指令定义的两个隐式变量

HELLO_BINARY_DIR 和 HELLO_SOURCE_DIR。

slitaz c语言开发环境,makefile和cmake的简单使用相关推荐

  1. 轻松玩转树莓派Pico之三、Windows+Ubuntu虚拟机模式下VSCode C语言开发环境搭建

    目录 1.VSCode下载与安装 2.VSCode基础插件安装 3.SSH连接与配置 4.SSH免密登录 5.Pico编译 工欲善其事,必先利其器.之前的介绍的Pico流程都是通过命令行编译,没有进行 ...

  2. win10 C语言开发环境搭建

    win10 C语言开发环境搭建 一.编辑器的选择 二.windows10下的开发环境 方法一: 1.下载msys64 2.更新安装包,下载mingw64 gcc编译器 3.打开clion编辑器,配置m ...

  3. 【Linux 操作系统】阿里云服务器 操作实战 部署C语言开发环境(vim配置,gcc) 部署J2EE网站(jdk,tomcat)

    . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . 博客总结 : 设置SecureCRT ...

  4. R 语言开发环境搭建

    R 语言在统计计算和画图方面有着显著的优势,因此在大数据领域也有其一席之地. 本文将演示怎样搭建R 语言开发环境. 搭建R 语言开发环境,主要有两个步骤: - 安装 R 到操作系统 - 安装支持 R ...

  5. Eclipse下搭建C语言开发环境

    Eclipse下搭建C语言开发环境 要使用Eclipse开发C/C++语言主要有 下面几个步骤: 1. 安装 JRE 去sun官方网站 下载安装即可 由于 Eclipse 本身是用 Java 开发的, ...

  6. Go语言开发环境配置

    http://blog.csdn.net/hil2000/article/details/41261267/ 一.我为什么要学习go语言 当今已经是移动和云计算时代,Go出现在了工业向云计算转型的时刻 ...

  7. c语言中文网 vc++6.0下载量_【新手必看】C语言开发环境,请查收!

    C语言开发环境的选择, 貌似是告诉我们,工欲善其事,必先利其器. 01.Visual Studio Visual Studio(简称 VS),它是 Windows 下的标准 IDE,VS系列为IDE( ...

  8. DOS命令、Java语言开发环境(JVM、JDK、JRE)

    DOS命令: DOS是一个早期的操作系统(黑窗口),现在已经被Windows系统(图形化)取代,对于我们开发人员,目前需要在DOS中完成一些事情,Java语言的初学者,学习一些DOS命令,会非常有帮助 ...

  9. GCC编译器简明教程(Linux下C语言开发环境的搭建)

    GCC编译器简明教程(Linux下C语言开发环境的搭建) 市面上常见的Linux都是发行版本,典型的Linux发行版包含了Linux内核.桌面环境(例如GNOME.KDE.Unity等)和各种常用的必 ...

最新文章

  1. css:position
  2. Android中网络流量控制(防火墙)——Iptables
  3. Hadoop配置文件( hadoop-env.sh、core-site.xml、hdfs-site.xm、mapred-site.xml、yarn-site.xml、 slaves)详解
  4. 禁用win10触摸屏手势_笔记本WIN10系统启用或关闭触控板的多指(多点)触控功能步骤...
  5. 博士后到底值不值得做?!
  6. 阿里云服务器 免费获取SSL证书 配置HTTPS安全访问
  7. left floating
  8. MyCobot六轴机械臂开箱及开发前的准备工作(一)
  9. 如何快速通过阿里云ACP 认证?
  10. java去除多余excel_java使用poi删除excel中的空行
  11. matlab /simulink车辆防抱死制动系统ABS建模仿真
  12. P2P下载技术-BT协议与Magnet磁力链接
  13. 软考中级到底有没有用?价值高吗?
  14. 英语中的分数 带分数 小数怎么读
  15. BZOJ 4833: [Lydsy1704月赛]最小公倍佩尔数(数论 + 最值反演)
  16. 分布式 PostgreSQL 集群(Citus),分布式表中的分布列选择最佳实践
  17. kingbase人大金仓常用sql命令(自用总结)
  18. 圣诞树有手就行的c语言代码
  19. 宽带连接常见错误 解决
  20. PB的应用对象和事务对象

热门文章

  1. php二分法实力,php常见的几种排序以及二分法查找
  2. C语言程序设计基础实验教程,C语言程序设计基础实验教程
  3. geddy mysql_以ToDoList应用来学习Geddy
  4. java8与hibernate_Hibernate 使用java8 LocalDateTime 注意事项
  5. Qt安装事件过滤器、过滤子控件事件、截获控件按键、鼠标事件
  6. 【leetcode】332. Reconstruct Itinerary
  7. linux自学笔记--DNS服务器
  8. php设计模式总结-单件模式
  9. 2013 8.20 ip地址的计算总结
  10. android crash分析工具,Android Crash之Native Crash分析