CMake學習(一)——cmake的編譯、安裝及簡單使用(ubuntu)


《一日二十四挨踢www.1024it.net》站文章在未特殊说明下默认为原创性文章。

在未有正式书面授权情况下,请勿转载。谢谢配合




        作為一名項目開發人員,我們必須學會一些自動化的工程構建工具,如cmake,automake等等,在此記錄一些關於CMake的使用方法。


cmake的獲取:


        我們可以從cmake官網直接下載cmake的binary或者source code。 cmake官網下載   

cmake的binary安裝:

        如果想偷懶或者自己感覺沒有必要,那就直接在 官網下載的 Binary distributions中找適合自己的就可以了。如果沒有特殊要求,請直接下載最新版本,當前最新版本是2.8.12.1。
        1. 下載 cmake-2.8.12.1-Linux-i386.tar.gz
        2. 解壓,我們會生成cmake-2.8.12.1-Linux-i386的文件夾
$ tar xvf cmake-2.8.12.1-Linux-i386.tar.gz
        3. 把cmake-2.8.12.1-Linux-i386/ 移動到目錄/usr/local下,并重命名為cmake-2.8.12.1/
$ mv  cmake-2.8.12.1-Linux-i386/  /usr/local/cmake-2.8.12.1/
        4. 設置路徑 /usr/local/cmake-2.8.12.1/bin/ 到PATH變量中,
export  PATH=/usr/local/cmake-2.8.12.1/bin/:$PATH

cmake的source code 編譯,安裝

        我們從 官網下載的 source distributions中下載cmake-2.8.12.1.tar.gz,和binary一樣,這個也是沒有特殊要求,下載最新的,該版本當前為最新版本。
      1.下載cmake-2.8.12.1.tar.gz
      2.解壓cmake-2.8.12.1.tar.gz,我們會生成cmake-2.8.12.1/的文件夾
$ tar xvf cmake-2.8.12.1.tar.gz
      3. 進入cmake-2.8.12.1/
$ cd cmake-2.8.12.1/
       4. 這裡含有CMakeLists.txt 和configure,我們默認使用configure(假設我們暫時沒有cmake)
$ ./configure --prefix=`pwd`/_install/       (--prefix可以隨意指定,只是我們在加入PATH時,加入我們指定目錄的bin就可以了)
       5. 編譯,安裝:
$ make && make install    (如果前面指定的目錄不在你的用戶目錄下,也許在安裝時沒有權限,我們需要在make install 前面加上sudo)

cmake的簡單使用:

Robin的BB工程下載
1. 第一个CMake 工程:
先tree一下helloworld工程:
helloworld$ tree 
.
├── CMakeLists.txt
└── helloworld.c

0 directories, 2 files
列出 CMakeLists.txt的内容:
helloworld$ cat CMakeLists.txt 

# project的参数可以随意设置
project(hello)

# 最低版本限制
cmake_minimum_required(VERSION  2.8)

# 把.c/.cpp赋值给SRC
aux_source_directory(. SRC)

# 编译$(SRC) 为 HelloRobin,工程的输出也可以随意设置
add_executable(HelloRobin ${SRC})

2.包含靜態庫的CMake工程示例:
同樣tree一下multilibs工程:

multilibs$ tree 
.
├── CMakeLists.txt
├── include
│   ├── apple.h
│   ├── linux.h
│   └── window.h
├── lib
│   ├── apple
│   │   ├── apple.c
│   │   └── CMakeLists.txt
│   ├── CMakeLists.txt
│   ├── linux
│   │   ├── CMakeLists.txt
│   │   └── linux.c
│   └── window
│       ├── CMakeLists.txt
│       └── window.c
├── README
└── src
    └── main.c

列出 CMakeLists.txt的内容:
multilibs 下的CMakeLists.txt:
multilibs$ cat CMakeLists.txt 

# 设置工程的名称,大小写都行,大写比较帅气
project(MULTILIBS)

# 设置cmake的最小版本号
cmake_minimum_required(VERSION 2.8)

# 设置cmake的源码根目录
set(CMAKE_SOURCE_DIR .)

# 设置include的目录
include_directories(${CMAKE_SOURCE_DIR}/include)

# 增加我们需要的子目录
add_subdirectory(lib)

# 把${CMAKE_SOURCE_DIR}/src下的所有.c/.cpp 赋值给变量SRC
aux_source_directory(${CMAKE_SOURCE_DIR}/src SRC)

# ${SRC}下的文件编译成为 main 文件
ADD_EXECUTABLE(main ${SRC})

# 编译main时需要链接的库文件
target_link_libraries(main linux)
target_link_libraries(main window)
target_link_libraries(main apple)

multilibs/lib/下的CMakeLists.txt:
multilibs/lib$ cat CMakeLists.txt 
add_subdirectory(linux)
add_subdirectory(apple)
add_subdirectory(window)

multilibs/lib/apple/下的CMakeLists.txt:
multilibs/lib/apple$ cat CMakeLists.txt 
aux_source_directory(. APPLE)
add_library(apple ${APPLE})

multilibs/lib/linux/下的CMakeLists.txt:
multilibs/lib/linux$ cat CMakeLists.txt 
aux_source_directory(. LINUX)
add_library(linux ${LINUX})

multilibs/lib/window/下的CMakeLists.txt:
multilibs/lib/window$ cat CMakeLists.txt 
aux_source_directory(. WINDOW)
add_library(window ${WINDOW})

展示一下multilibs工程的編譯和執行過程:
cmake_testcase$ ls
helloworld  multilibs  README
cmake_testcase$ mkdir build
cmake_testcase$ ls
build  helloworld  multilibs  README
cmake_testcase$ cd build/
robin@ubuntu:~/workspace/c_wspace/cmake/cmake_testcase/build$ cmake ../multilibs/
-- The C compiler identification is GNU 4.6.3
-- The CXX compiler identification is GNU 4.6.3
-- 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
-- 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
-- Configuring done
-- Generating done
-- Build files have been written to: /home/robin/workspace/c_wspace/cmake/cmake_testcase/build
cmake_testcase/build$ make
Scanning dependencies of target window
[ 25%] Building C object lib/window/CMakeFiles/window.dir/window.c.o
Linking C static library libwindow.a
[ 25%] Built target window
Scanning dependencies of target linux
[ 50%] Building C object lib/linux/CMakeFiles/linux.dir/linux.c.o
Linking C static library liblinux.a
[ 50%] Built target linux
Scanning dependencies of target apple
[ 75%] Building C object lib/apple/CMakeFiles/apple.dir/apple.c.o
Linking C static library libapple.a
[ 75%] Built target apple
Scanning dependencies of target main
[100%] Building C object CMakeFiles/main.dir/src/main.c.o
Linking C executable main
[100%] Built target main
cmake_testcase/build$ ./main 
Hello!!!!Linux
Hello!!Apple
Hello!!!!!!Window




參考鏈接:

1. http://cmake.org/cmake/resources/software.html
2. http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/
3. http://www.cnblogs.com/itech/archive/2010/11/28/1890220.html



你可能感兴趣的:(cmake安装,cmake使用,cmake编译,cmake学习,cmake源码)