标签:svc 体系 了解 目录 执行 www 编译 windows 运行
CMake特点
我们需要学习CMake吗?
传统上Linux平台下C/C++项目还是靠makefile来组织代码,但是越来越多开源软件使用CMake来组织代码,Linux平台下CMake也能生成makefile,用户安装软件的时候与传统上基于makefile安装软件过程是一样的,这一点对用户及其友好。再加上makefile那蛋疼的语法,相比之下CMake就要好太多。
初探cmake
代码结构
# tree /root/cmake_learn /root/cmake_learn ├── CMakeLists.txt └── main.c ####main.c#### #include <stdio.h> int main(){ printf("Hello World!\n"); return 0; } ####main.c#### PROJECT(HELLO) SET(SRC_LIST main.c) MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR}) MESSAGE(STATUS "This is SOURCE dir " ${HELLO_SOURCE_DIR}) ADD_EXECUTABLE(hello ${SRC_LIST})
代码构建
在项目目录(/root/cmake_learn)下
cmake .
会生成多生成出CMakeFiles目录,CMakeCache.txt cmake_install.cmake Makefile文件。这种做法是内部构建(in-source build)
# ls CMakeCache.txt CMakeFiles cmake_install.cmake CMakeLists.txt main.c Makefile
接着使用make构建(由于我这个项目简单,就没有make install的过程)。单纯make构建(build)过程信息输出较少,可以make VERBOSE=1 输出更加详细过程信息。但是这个输出又有很多信息我们实际不需要,还可以设置CMAKE_VERBOSE_MAKEFILE 。参考 这个
# make Scanning dependencies of target hello [ 50%] Building C object CMakeFiles/hello.dir/main.c.o [100%] Linking C executable hello [100%] Built target hello
外部构建(out-of-source build)
上面已经展示过了内部构件,发现生成的中间文件比我们自己写的文件还要多。更甚至这些中间文件还无法自动删除(即你运行make clean删不掉中间文件)。网上解释说cmake不支持make distclean,关于make clean 和 make distclean网上解释很多。这个其实不关键,无论是clean、distclean也好,还是其他的什么东西。在makefile中都是一个标记,这些标记没有依赖,通常做一些中间文件清理、安装软件的工作。但是有的时候如果某个二货不小心建了一个和标记一样的文件,就可能导致标记对应的指令无法执行,参考 这个
为了解决这个问题,cmake还支持外部构建(out-of-source build)
任意位置建一个build目录,当然也可以是项目目录。cmake_learn有我们创建的CMakeLists.txt
# pwd /root/build # cmake /root/cmake_learn
执行后,中间文件会生成在我们指定的build目录
# pwd /root/build # ls CMakeCache.txt CMakeFiles cmake_install.cmake Makefile # make # ./hello Hello World!
稍微复杂点的代码
43
标签:svc 体系 了解 目录 执行 www 编译 windows 运行
原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/10234502.html