一、常用配置
#添加可执行文件 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 )