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 )
原文地址:https://www.cnblogs.com/wangbin2188/p/15772073.html