cmake

Cmake 总结

  • cmake的目的是为了生成makefile文件,方便对工程的编译

CMakeLists.txt

  • 其为描述链接规则的配置文件
  • cmake通过CMakeLists.txt来包含相应的头文件,配置生成可执行文件,链接相应的库,并由此生成makefile文件

CMakeLists.txt常用语法

  • CMakeLists.txt通常需要指出该工程所需的最小的cmake版本,否则会出警告

    cmake_minimum_required(VERSION 3.11)
    
  • 设置工程名称,

    project("test_mnn")  #工程名称设置为MNN
    
    project("test_mnn" CXX)    #除了工程名字设置为MNN,支持C++语言
    
    project("test_mnn" C CXX)  #除了工程名字设置为MNN,支持C/C++语言
    
  • 设置变量

    set(TARGET_GEN "test_mnn")  #将变量TARGET_GEN设置成"test_mnn"
    
  • 包含头文件

    include_directories(/usr/include/)
    
  • 生成可执行文件

    add_executable(test_mnn ./two.cpp) #生成的可执行文件为test_mnn ,由CMakeLists.txt当前目录下的two.cpp生成
    
  • 链接动态库

    target_link_libraries(${TARGET_GEN} PRIVATE libpthread.so librt.so libasound.so libjsoncpp.so)
    
    • 为变量TARGET_GEN链接libpthread.so librt.so libasound.so libjsoncpp.so动态库文件
    • PRIVATE 为关键字表示私有的,与此相对应的还有INTERFACE和PUBLIC
    • TARGET_GEN为一个变量对于变量的取值方式为${变量},但是在IF变量中直接使用变量名
    target_link_libraries(${TARGET_GEN} PRIVATE /home/openailab/T-TEST-MNN/lib/libMNN.a)
    
    • 静态库链接可能有链接不完全的问题,比如MNN的静态库,可以使用下面的方法链接
    target_link_libraries(${TARGET_GEN} PRIVATE -Wl,--whole-archive /home/openailab/T-TEST-MNN/lib/libMNN.a -Wl,--no-whole-archive)
    
  • 生成动态库或者静态库

    ADD_LIBRARY(test_mnn SHARED ./two.cpp)
    
    • 生成的库名称为libtest_mnn.so
    • SHARED,动态库 STATIC,静态库

install

  • 一般的流程为先创建build文件,在build文件下进行

    mkdir build && cd build && cmake ..
    
  • 在build文件夹下生成makefile,此时可以直接进行编译

    make -j16
    
  • 编译完成之后,直接进行安装,默认位置是/usr/local

    make install
    
  • 指定安装路径

    • 在cmake 时
    cmake -DCMAKE_INSTALL_PREFIX=../install ..
    
    • 在安装时
    make install DESTDIR=../install
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值