最近项目代码重构切换到了cmake的编译环境下。 有幸学习了一下cmake的一些基本的操作,记录一下。

0 . 创建一个工程

0.0 指明工程需要的cmake的最低版本(或者是最低到最高)

cmake_minimum_required(VERSION 3.1.2 FATAL_ERROR)
# cmake_minimum_required(VERSION <min>[...<policy_max>] [FATAL_ERROR])

0.1 指定工程的名称以及 编程语言等特点

project(myAwesomePrj)# project(<PROJECT-NAME> [<language-name>...])
# project(<PROJECT-NAME>
#        [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
#        [DESCRIPTION <project-description-string>]
#        [HOMEPAGE_URL <url-string>]
#        [LANGUAGES <language-name>...])

1. cmake 生成工程

1.1 生成可执行文件

add_executable( application ${CMAKE_CURRENT_LIST_DIR}/1.cpp${CMAKE_CURRENT_LIST_DIR}/2.c
)
[jeason@centos7 cmake]$ mkdir build && cd build 
[jeason@centos7 build]$ cmake ..
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jeason/cmake/build
[jeason@centos7 build]$ make
Scanning dependencies of target application
[ 33%] Building CXX object CMakeFiles/application.dir/1.cpp.o
[ 66%] Building C object CMakeFiles/application.dir/2.c.o
[100%] Linking CXX executable application
[100%] Built target application
[jeason@centos7 build]$ ls -l
total 40
-rwxrwxr-x. 1 jeason jeason  8376 Dec  5 09:19 application
-rw-rw-r--. 1 jeason jeason 11635 Dec  5 09:19 CMakeCache.txt
drwxrwxr-x. 5 jeason jeason  4096 Dec  5 09:19 CMakeFiles
-rw-rw-r--. 1 jeason jeason  1353 Dec  5 09:19 cmake_install.cmake
-rw-rw-r--. 1 jeason jeason  5278 Dec  5 09:19 Makefile
[jeason@centos7 build]$

1.2 生成静态库

cmake_minimum_required(VERSION 3.1.6)
project(myAwesomePrj)add_library( temp STATIC${CMAKE_CURRENT_LIST_DIR}/1.cpp${CMAKE_CURRENT_LIST_DIR}/2.c
)
[jeason@centos7 cmake]$ mkdir build && cd build 
[jeason@centos7 build]$ cmake ..
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jeason/cmake/build
[jeason@centos7 build]$ make
Scanning dependencies of target temp
[ 33%] Building CXX object CMakeFiles/temp.dir/1.cpp.o
[ 66%] Building C object CMakeFiles/temp.dir/2.c.o
[100%] Linking CXX static library libtemp.a
[100%] Built target temp
[jeason@centos7 build]$ ls -l
total 32
-rw-rw-r--. 1 jeason jeason 11687 Dec  5 09:27 CMakeCache.txt
drwxrwxr-x. 5 jeason jeason  4096 Dec  5 09:27 CMakeFiles
-rw-rw-r--. 1 jeason jeason  1353 Dec  5 09:27 cmake_install.cmake
-rw-rw-r--. 1 jeason jeason  2370 Dec  5 09:27 libtemp.a
-rw-rw-r--. 1 jeason jeason  5131 Dec  5 09:27 Makefile
[jeason@centos7 build]$

1.3 生成动态库

cmake_minimum_required(VERSION 3.1.6)
project(myAwesomePrj)add_library( temp SHARED${CMAKE_CURRENT_LIST_DIR}/1.cpp${CMAKE_CURRENT_LIST_DIR}/2.c
)
[jeason@centos7 cmake]$ mkdir build && cd build 
[jeason@centos7 build]$ cmake ..
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jeason/cmake/build
[jeason@centos7 build]$ make
Scanning dependencies of target temp
[ 33%] Building CXX object CMakeFiles/temp.dir/1.cpp.o
[ 66%] Building C object CMakeFiles/temp.dir/2.c.o
[100%] Linking CXX shared library libtemp.so
[100%] Built target temp
[jeason@centos7 build]$ ls -l
total 36
-rw-rw-r--. 1 jeason jeason 11687 Dec  5 09:29 CMakeCache.txt
drwxrwxr-x. 5 jeason jeason  4096 Dec  5 09:29 CMakeFiles
-rw-rw-r--. 1 jeason jeason  1353 Dec  5 09:29 cmake_install.cmake
-rwxrwxr-x. 1 jeason jeason  7912 Dec  5 09:29 libtemp.so
-rw-rw-r--. 1 jeason jeason  5131 Dec  5 09:29 Makefile
[jeason@centos7 build]$
file(GLOB_RECURSE some_prj_src "*${CMAKE_CURRENT_LIST_DIR}.cpp")
file(GLOB_RECURSE some_prj_src "*.cpp")

2. 一些辅助工具

2.1 打印提示信息

cmake_minimum_required(VERSION 3.1.6)
project(myAwesomePrj)
message("hello world .....  ")
[jeason@centos7 build]$ cmake ..
hello world .....
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jeason/cmake/build

2. 辅助查找文件

cmake_minimum_required(VERSION 3.1.6)
project(myAwesomePrj)
file(GLOB_RECURSE file_out_list_c      "*.c")
file(GLOB_RECURSE file_out_list_cpp    "*.cpp")
file(GLOB_RECURSE file_out_list_c_cpp  "*.cpp" "*.c")
message("file find file_out_list_c      = ${file_out_list_c}") 
message("file find file_out_list_cpp    = ${file_out_list_cpp}") 
message("file find file_out_list_c_cpp  = ${file_out_list_c_cpp}") message("----------------------------------------------------------------------------") foreach(files  ${file_out_list_c})message("----- ${files}")    
endforeach()
[jeason@centos7 build]$ cmake ..
file find file_out_list_c      = /home/jeason/cmake/2.c;/home/jeason/cmake/build/CMakeFiles/3.6.2/CompilerIdC/CMakeCCompilerId.c;/home/jeason/cmake/build/CMakeFiles/feature_tests.c
file find file_out_list_cpp    = /home/jeason/cmake/1.cpp;/home/jeason/cmake/build/CMakeFiles/3.6.2/CompilerIdCXX/CMakeCXXCompilerId.cpp
file find file_out_list_c_cpp  = /home/jeason/cmake/1.cpp;/home/jeason/cmake/build/CMakeFiles/3.6.2/CompilerIdCXX/CMakeCXXCompilerId.cpp;/home/jeason/cmake/2.c;/home/jeason/cmake/build/CMakeFiles/3.6.2/CompilerIdC/CMakeCCompilerId.c;/home/jeason/cmake/build/CMakeFiles/feature_tests.c
----------------------------------------------------------------------------
----- /home/jeason/cmake/2.c
----- /home/jeason/cmake/build/CMakeFiles/3.6.2/CompilerIdC/CMakeCCompilerId.c
----- /home/jeason/cmake/build/CMakeFiles/feature_tests.c
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jeason/cmake/build
[jeason@centos7 build]$

还有亿点点细节没写完 有点想不起来了,明天看看代码再做笔记!!!
cmake 是非常强大的! 语法也是清晰易懂的