• cmake常用配置项


     一、常用配置

    #添加可执行文件
    add_executable(main main.c)
    add_executable(main main.c testFunc.c)
    add_executable(main ${SRC_LIST})
    #将指定目录下所有的源文件存储在一个变量中
    aux_source_directory(dir var)
    aux_source_directory(. SRC_LIST)
    #新建变量
    set( SRC_LIST
         ./main.c
         ./testFunc1.c
         ./testFunc.c)
    set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
    set (LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
    #添加多个指定头文件的搜索路径,有点类似java中的import package.*
    include_directories (test_func)
    include_directories (test_func test_func1)
    #向当前工程添加存放源文件的子目录,一般用在顶级配置文件
    add_subdirectory (src)
    #宏变量
    EXECUTABLE_OUTPUT_PATH :目标二进制可执行文件的存放位置
    PROJECT_SOURCE_DIR:工程的根目录
    LIBRARY_OUTPUT_PATH: 库文件的默认输出路径
    #生成动态库或静态库
    add_library
    add_library (testFunc_shared SHARED ${SRC_LIST})
    add_library (testFunc_static STATIC ${SRC_LIST})
    #设置最终生成的库的名称
    set_target_properties
    set_target_properties (testFunc_static PROPERTIES OUTPUT_NAME "testFunc")
    #在指定目录下查找指定库,参数一是变量名称,参数二是库名称,参数三是HINTS,参数四是路径
    find_library(TESTFUNC_LIB testFunc HINTS ${PROJECT_SOURCE_DIR}/testFunc/lib)
    #把目标文件与库文件进行链接
    target_link_libraries
    target_link_libraries (main ${TESTFUNC_LIB})
    #添加编译选项
    add_compile_options(-std=c++11 -Wall) 

     二、案例一

     目录结构如图所示,fileio和mathFunctions是同级目录,entry.c是一个可执行文件,内容如下

    #include <stdio.h>
    #include <string.h>
    #include "m_functions.h"
    int main(){
        printf("%d\n", my_square(10));
        printf("%d\n", my_sqrt(100));
    }

    为了引用mathFunctions文件夹下的内容,fileio里的cmakelists.txt要这样写

    project(fileio)
    #if not do this.entry.c can't find m_functions.h
    include_directories(../mathFunctions)
    aux_source_directory(../mathFunctions MATH_SRC)
    #add a executable
    add_executable(entry entry.c ${MATH_SRC})

    三、案例二

    还有一种方式,可以将mathFunction做成一个库,以库的形式引入

     main.c在根目录,mathFunctions下需要配置一个cmakelists.txt,把自己注册为一个lib库,内容如下

    add_library(mathFunctions m_functions.c)

    main.c很简单

    #include <stdio.h>
    
    #include "mathFunctions/m_functions.h"
    
    
    int main(){
        printf("%d\n", my_sqrt(36));
        printf("%d\n", my_square(2));
    }

    根目录下的cmakelists.txt内容如下,最后一行就是把mathFunctions以库的形式连接到目标:

    #add a version num
    cmake_minimum_required(VERSION 3.11)
    #set the project name
    project(linux-api)
    #C++11标准
    set(CMAKE_CXX_STANDARD 11)
    #add a sub library
    add_subdirectory(mathFunctions)
    
    #add a executable
    add_executable(main main.c )
    #Specify libraries  to  a given target
    target_link_libraries(main PUBLIC mathFunctions )
  • 相关阅读:
    Go网络文件传输
    Go网络编程
    LNMP环境搭建(PHP7.4.0)
    LNMP环境搭建(PHP7.2.25)
    Please ensure the argon2 header and library are installed
    MySQL权限管理
    nginx ingress controller配置默认SSL证书
    kubernetes pod内抓包,telnet检查网络连接的几种方式
    ansible取出register变量中最长字符串
    kubernetes flannel pod CrashLoopBackoff解决
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/15772073.html
Copyright © 2020-2023  润新知