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
- $ mv cmake-2.8.12.1-Linux-i386/ /usr/local/cmake-2.8.12.1/
我們從
官網下載的
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
- $ cd cmake-2.8.12.1/
- $ ./configure --prefix=`pwd`/_install/ (--prefix可以隨意指定,只是我們在加入PATH時,加入我們指定目錄的bin就可以了)
- $ make && make install (如果前面指定的目錄不在你的用戶目錄下,也許在安裝時沒有權限,我們需要在make install 前面加上sudo)
cmake的簡單使用:
Robin的BB工程下載
1. 第一个CMake 工程:
先tree一下helloworld工程:
列出 CMakeLists.txt的内容:
2.包含靜態庫的CMake工程示例:
同樣tree一下multilibs工程:
列出 CMakeLists.txt的内容:
multilibs 下的CMakeLists.txt:
multilibs/lib/下的CMakeLists.txt:
multilibs/lib/apple/下的CMakeLists.txt:
multilibs/lib/linux/下的CMakeLists.txt:
multilibs/lib/window/下的CMakeLists.txt:
展示一下multilibs工程的編譯和執行過程:
1. 第一个CMake 工程:
先tree一下helloworld工程:
- helloworld$ tree
- .
- ├── CMakeLists.txt
- └── helloworld.c
- 0 directories, 2 files
- 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