cmake的簡單使用:

来源:互联网 发布:数据库的简单实现 编辑:程序博客网 时间:2024/05/21 10:28

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的文件夾
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. $ 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/
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  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變量中,
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. 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/的文件夾
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. $ tar xvf cmake-2.8.12.1.tar.gz  
      3. 進入cmake-2.8.12.1/
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. $ cd cmake-2.8.12.1/  
       4. 這裡含有CMakeLists.txt 和configure,我們默認使用configure(假設我們暫時沒有cmake)
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. $ ./configure --prefix=`pwd`/_install/       (--prefix可以隨意指定,只是我們在加入PATH時,加入我們指定目錄的bin就可以了)  
       5. 編譯,安裝:
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. $ make && make install    (如果前面指定的目錄不在你的用戶目錄下,也許在安裝時沒有權限,我們需要在make install 前面加上sudo) 

cmake的簡單使用:

Robin的BB工程下載
1. 第一个CMake 工程:
先tree一下helloworld工程:
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. helloworld$ tree   
  2. .  
  3. ├── CMakeLists.txt  
  4. └── helloworld.c  
  5.   
  6. 0 directories, 2 files  
列出 CMakeLists.txt的内容:
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. helloworld$ cat CMakeLists.txt   
  2.   
  3. # project的参数可以随意设置  
  4. project(hello)  
  5.   
  6. # 最低版本限制  
  7. cmake_minimum_required(VERSION  2.8)  
  8.   
  9. # 把.c/.cpp赋值给SRC  
  10. aux_source_directory(. SRC)  
  11.   
  12. # 编译$(SRC) 为 HelloRobin,工程的输出也可以随意设置  
  13. add_executable(HelloRobin ${SRC})  

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

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. multilibs$ tree   
  2. .  
  3. ├── CMakeLists.txt  
  4. ├── include  
  5. │   ├── apple.h  
  6. │   ├── linux.h  
  7. │   └── window.h  
  8. ├── lib  
  9. │   ├── apple  
  10. │   │   ├── apple.c  
  11. │   │   └── CMakeLists.txt  
  12. │   ├── CMakeLists.txt  
  13. │   ├── linux  
  14. │   │   ├── CMakeLists.txt  
  15. │   │   └── linux.c  
  16. │   └── window  
  17. │       ├── CMakeLists.txt  
  18. │       └── window.c  
  19. ├── README  
  20. └── src  
  21.     └── main.c  

列出 CMakeLists.txt的内容:
multilibs 下的CMakeLists.txt:
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. multilibs$ cat CMakeLists.txt   
  2.   
  3. # 设置工程的名称,大小写都行,大写比较帅气  
  4. project(MULTILIBS)  
  5.   
  6. # 设置cmake的最小版本号  
  7. cmake_minimum_required(VERSION 2.8)  
  8.   
  9. # 设置cmake的源码根目录  
  10. set(CMAKE_SOURCE_DIR .)  
  11.   
  12. # 设置include的目录  
  13. include_directories(${CMAKE_SOURCE_DIR}/include)  
  14.   
  15. # 增加我们需要的子目录  
  16. add_subdirectory(lib)  
  17.   
  18. # 把${CMAKE_SOURCE_DIR}/src下的所有.c/.cpp 赋值给变量SRC  
  19. aux_source_directory(${CMAKE_SOURCE_DIR}/src SRC)  
  20.   
  21. # ${SRC}下的文件编译成为 main 文件  
  22. ADD_EXECUTABLE(main ${SRC})  
  23.   
  24. # 编译main时需要链接的库文件  
  25. target_link_libraries(main linux)  
  26. target_link_libraries(main window)  
  27. target_link_libraries(main apple)  

multilibs/lib/下的CMakeLists.txt:
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. multilibs/lib$ cat CMakeLists.txt   
  2. add_subdirectory(linux)  
  3. add_subdirectory(apple)  
  4. add_subdirectory(window)  

multilibs/lib/apple/下的CMakeLists.txt:
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. multilibs/lib/apple$ cat CMakeLists.txt   
  2. aux_source_directory(. APPLE)  
  3. add_library(apple ${APPLE})  

multilibs/lib/linux/下的CMakeLists.txt:
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. multilibs/lib/linux$ cat CMakeLists.txt   
  2. aux_source_directory(. LINUX)  
  3. add_library(linux ${LINUX})  

multilibs/lib/window/下的CMakeLists.txt:
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. multilibs/lib/window$ cat CMakeLists.txt   
  2. aux_source_directory(. WINDOW)  
  3. add_library(window ${WINDOW})  

展示一下multilibs工程的編譯和執行過程:
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. cmake_testcase$ ls  
  2. helloworld  multilibs  README  
  3. cmake_testcase$ mkdir build  
  4. cmake_testcase$ ls  
  5. build  helloworld  multilibs  README  
  6. cmake_testcase$ cd build/  
  7. robin@ubuntu:~/workspace/c_wspace/cmake/cmake_testcase/build$ cmake ../multilibs/  
  8. -- The C compiler identification is GNU 4.6.3  
  9. -- The CXX compiler identification is GNU 4.6.3  
  10. -- Check for working C compiler: /usr/bin/cc  
  11. -- Check for working C compiler: /usr/bin/cc -- works  
  12. -- Detecting C compiler ABI info  
  13. -- Detecting C compiler ABI info - done  
  14. -- Check for working CXX compiler: /usr/bin/c++  
  15. -- Check for working CXX compiler: /usr/bin/c++ -- works  
  16. -- Detecting CXX compiler ABI info  
  17. -- Detecting CXX compiler ABI info - done  
  18. -- Configuring done  
  19. -- Generating done  
  20. -- Build files have been written to: /home/robin/workspace/c_wspace/cmake/cmake_testcase/build  
  21. cmake_testcase/build$ make  
  22. Scanning dependencies of target window  
  23. [ 25%] Building C object lib/window/CMakeFiles/window.dir/window.c.o  
  24. Linking C static library libwindow.a  
  25. [ 25%] Built target window  
  26. Scanning dependencies of target linux  
  27. [ 50%] Building C object lib/linux/CMakeFiles/linux.dir/linux.c.o  
  28. Linking C static library liblinux.a  
  29. [ 50%] Built target linux  
  30. Scanning dependencies of target apple  
  31. [ 75%] Building C object lib/apple/CMakeFiles/apple.dir/apple.c.o  
  32. Linking C static library libapple.a  
  33. [ 75%] Built target apple  
  34. Scanning dependencies of target main  
  35. [100%] Building C object CMakeFiles/main.dir/src/main.c.o  
  36. Linking C executable main  
  37. [100%] Built target main  
  38. cmake_testcase/build$ ./main   
  39. Hello!!!!Linux  
  40. Hello!!Apple  
  41. 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
0 0
原创粉丝点击