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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要下载cmake-3.22.1的源代码,并将其解压到相应的目录。可以使用以下命令进入解压后的目录: ```bash cd cmake-3.22.1/ ``` 接下来,你需要安装编译cmake所需的依赖项。可以使用以下命令安装依赖项: ```bash sudo apt-get install gcc libssl-dev make ``` 然后,你需要运行configure脚本来自动配置源代码以适应不同的平台。可以使用以下命令运行configure脚本: ```bash sudo ./configure ``` 如果在查询版本时出现"-bash: /usr/bin/cmake: No such file or directory"的错误,你需要将编译后的cmake文件复制到系统目录。可以使用以下命令复制文件: ```bash sudo cp bin/cmake /usr/bin/ ``` 最后,你可以使用以下命令检查当前系统的CMake版本: ```bash cmake --version ``` 如果一切正常,你可以使用以下命令进行安装(某些软件可能需要在进行安装之前运行make check或make test进行一些测试): ```bash sudo make install ``` 请确保在执行这一步时具有root权限,因为需要向系统写入文件。希望这些步骤能够帮助你在Ubuntu编译安装CMake 3.22版本。123 #### 引用[.reference_title] - *1* *2* *3* [超详细教程:Ubuntu20.04 编译升级 CMake3.22 ——更新于2021.12](https://blog.csdn.net/ymzhu385/article/details/122049749)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值