make和cmake构建工具,linux环境源码编译

  在linux环境下编程,标配的编译器是gcc,g++,以及构建工具make,cmake。linux中和开发环境密切相关的有/usr/bin(命令程序), /usr/include(源码),/usr/lib(编译的库),这些其实和c/c++的编程很密切。

gcc -o NameMain name.c main.c // 典型的gcc使用方法

  我们尝试使用在linux环境,使用make工具编译git源码。编译过程中提示找不到curl.h/curl.c文件,这个就是说该目录下没有,/usr/include目录也没有,那么就需要手动去下载。解决了这个依赖,还有其他依赖,手动安装git确实很麻烦,应为还要安装很多的依赖库,所以最好还是使用二进制安装包,比如mysql。

  回顾我们开发c/c++程序的过程,一般从源码.cpp到可执行的机器码,需要源码文件,一般也会引用别人的库文件,make就是处理文件间的依赖关系的shell命令,其依赖和构建规则使用Makefile说明,这里推荐阮一峰老师的make教程。下面老说说makefile文件的编写:

<target> : <prerequisites> 
[tab]  <commands>

   这就是makefile的构成单元,非常简单明了,其中,commands就可以使用g++命令了。这样我们可以直接执行makefile文件,而不是逐个编译,链接,大大提高了工作效率。make install其实是一个约定的target,用于向计算机中写入库文件。make -D CMAKE_INSTALL_PREFIX=/usr/local,用于指定安装路径,cmake默认会安装在,usr/local中。

  可以看到,如果程序规模很大,编写Makefile也工作量也会很大,并且其修改也会很麻烦,于是cmake工具来啦,简单一句话就是生成Makefile的工具,其核心是CMakeLists.txt,这是一个典型的CMakeLists.txt的写法,它其中体现了很多特殊的命令,比如cmake_minimum_required要求对于cmake版本的支持,project命令说明了其工程的名字。if,else,set等命令的支持等。

#一般都以这一行开始
cmake_minimum_required (VERSION 2.6)
 
#项目名
project (TEST)
 
#选择编译器,LINUX上选择g++,MAC OS上选择clang++
if (APPLE)
	set (CMAKE_CXX_COMPILER clang++)
elseif (UNIX)
	set (CMAKE_CXX_COMPILER g++)
endif()

#设置编译器选项支持c++11
set (CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -std=c++11)
 
#查找boost库
find_library (BOOST_SYSTEM
	NAMES boost_system
	PATHS /usr/lib /usr/local/lib
	)
 
find_library (BOOST_THREAD
	NAMES boost_thread
	PATHS /usr/lib /usr/local/lib
	)
 
 
#设置数学库的目标名,该变量在子目录也是可见的
set (MATH_LIB "my_math")
 
#添加头文件搜索路径
include_directories (./math)
 
#添加子目录,这样math目录才会被编译
add_subdirectory (math)
 
#添加可执行目标文件Test
add_executable (Test main.cpp)
 
#LIBS变量存储所有需要链接的库
set (LIBS ${MATH_LIB})
 
if (BOOST_SYSTEM) 
	set (LIBS ${LIBS} ${BOOST_SYSTEM})
endif()
 
if (BOOST_THREAD)
	set (LIBS ${LIBS} ${BOOST_THREAD})
endif()
 
#为可执行文件链接数学库

————————————————
版权声明:本文为CSDN博主「jupiterwangq」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ztemt_sw2/article/details/81355096

参考资料:

阮一峰make教程

cmake官方说明文档

configure和make的原理和使用

posted @ 2019-12-30 23:39  懂得了才能做一些改变  阅读(1016)  评论(0编辑  收藏  举报