美文网首页
2022年CMAKE笔记

2022年CMAKE笔记

作者: 何亮hook_8285 | 来源:发表于2022-01-16 20:11 被阅读0次

    安装CMAKE

    1.Centos Linux可使用yum安装CMake。

    yum install -y cmake
    

    2.源代码安装

    #需要安装gcc
    yum install -y gcc automake autoconf libtool gcc-c++  openssl-devel make
    #切换到软件目录
    /home/linux_soft/other
    #解压
    tar -zxvf cmake-3.22.1.tar.gz
    #切换到解压目录
    cd cmake-3.22.1
    #编译
    ./bootstrap
    #gmake生成makefile文件
    gamke
    #安装
    make install
    

    3.Window没用安装过,去https://cmake.org/download/下载。

    第一个CMAKE

    创建cmake项目描述文件

    #创建cmake项目描述文件
    touch CMakeLists.txt
    

    CMakeLists.txt 的内容

    #项目名称
    project(demo)
    set(src_list main.cpp)
    message(STATUS "this is binary dir" ${demo_BINARY_DIR})
    message(STATUS "this is source dir" ${demo_SOURCE_DIR})
    
    add_executable(demo ${src_list})
    

    c++代码

    #include <iostream>
    using namespace std;
    
    int main(){
      cout << "hello world " << endl;
      return 0;
    }
    

    项目结构的CMake项目

    目录结构

    ├── build  #编译目录
    ├── CMakeLists.txt #项目
    └── src  #源代码目录
        ├── CMakeLists.txt
        └── main.cpp
    

    build目录同级的CMakeLists.txt文件

    project(demo)
    #指定子源代码目录
    add_subdirectory(./src bin)
    

    src目录下得CMakeLists.txt文件

    add_executable(demo main.cpp)
    

    项目结构的CMAKE安装项目

    安装

    • 一种是从源代码编译make install直接安装

    • 一种是打包时指定目录安装

      • 简单的可以直接指定安装目录:make install DESTDIR=/usr/local
      • 复杂一点可以指定目录安装:./configure --prefix=/usr/local

    CMakeLists.txt文件

    project(demo)
    add_subdirectory(./src bin)
    #用于安装文档 ,DESTINATION 是安装到/usr/local/share/doc/cmake
    INSTALL(FILES 1.txt DESTINATION test/)
    #安装脚本,PROGRAMS,安装到/usr/bin目录下
    INSTALL(PROGRAMS 1.sh DESTINATION bin)
    #安装目录
    INSTALL(DIRECTORY doc/ DESTINATION doc/)
    #安装执行文件
    INSTALL(TARGETS demo RUNTIME DESTINATION bin)
    
    #执行cmake
    cmake ..
    #或者指定安装目录
    cmake -DCMAKE_INSTALL_PREFIX=/usr/local/diy ..
    #编译
    make
    #安装
    make install
    

    静态库和动态库

    CMakeLists.txt文件

    set(lib_src hello.cpp)
    #动态库 so 或dll
    add_library(hello SHARED ${lib_src})
    #静态库 lib或 a
    add_library(hello STATIC ${lib_src})
    

    同时生成静态库和动态库

    add_library(hello_static STATIC ${lib_src})
    #对hello_static的重名为hello
    SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")
    #cmake 在构建⼀个新的target 时,会尝试清理掉其他使⽤这个名字的库,因为,在构建 libhello.so 时, 就会清理掉 libhello.a
    SET_TARGET_PROPERTIES(hello_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
    ADD_LIBRARY(hello SHARED ${lib_src})
    SET_TARGET_PROPERTIES(hello PROPERTIES OUTPUT_NAME "hello")
    SET_TARGET_PROPERTIES(hello PROPERTIES CLEAN_DIRECT_OUTPUT 1)
    

    动态库的版本号

    SET_TARGET_PROPERTIES(hello PROPERTIES VERSION 1.2 SOVERSION 1)
    

    安装共享库和静态库

    #⽂件放到该⽬录下
    INSTALL(FILES hello.h DESTINATION include/hello)
    #⼆进制,静态库,动态库安装都⽤TARGETS
    #ARCHIVE 特指静态库,LIBRARY 特指动态库,RUNTIME 特指可执⾏⽬标⼆进制。
    INSTALL(TARGETS hello hello_static LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
    

    make后头⽂件找不到的问题

    INCLUDE_DIRECTORIES(/usr/include/hello)
    

    相关文章

      网友评论

          本文标题:2022年CMAKE笔记

          本文链接:https://www.haomeiwen.com/subject/gnxqhrtx.html