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
参考资料: