[TOC]
cmake基本结构
首先一般先声明Cmake版本要求、项目名称、编译标志:
1 2 3 4 5
| cmake_minimum_required (VERSION 3.x)
project (XXXXXXX) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -std=c++14")
|
定义宏
1 2 3 4
| add_definitions(-DPRE_DEBUG=1)
|
设置源码目录:
1 2
| set (source_dir "${PROJECT_SOURCE_DIR}/src/")
|
可选配置(变量代替所有文件):
1 2
| file (GLOB source_files "${source_dir}/*.cpp")
|
生成可执行文件:
1 2 3
| add_executable (HelloWorld ${source_files})
|
链接库文件:
1 2
| target_link_libraries(HelloWorld -lpthread)
|
生成库文件:
1 2
| add_library(funcLib_shared SHARED SRC_LIST) add_library(funcLib_static STATIC SRC_LIST)
|
多文件工程编译
除了设置源文件目录,还需设置头文件以及库文件目录。
设置头文件目录:
1 2 3 4 5 6
| include_directories("${PROJECT_SOURCE_DIR}/include") include_directories(${PROJECT_SOURCE_DIR}/include) include_directories(${PROJECT_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/include)
|
设置库文件目录:
1 2 3 4 5 6
| link_directories("${PROJECT_SOURCE_DIR}/lib") link_directories(${CMAKE_SOURCE_DIR}/lib) link_directories(${PROJECT_SOURCE_DIR}/library ${PROJECT_SOURCE_DIR}/archive)
|
输出路径设置
- CMAKE_ARCHIVE_OUTPUT_DIRECTORY:默认存放静态库的文件夹位置;
- CMAKE_LIBRARY_OUTPUT_DIRECTORY:默认存放动态库的文件夹位置;
- LIBRARY_OUTPUT_PATH:默认存放库文件的位置,如果产生的是静态库并且没有指定
CMAKE_ARCHIVE_OUTPUT_DIRECTORY 则存放在该目录下,动态库也类似;
- CMAKE_RUNTIME_OUTPUT_DIRECTORY:存放可执行软件的目录;
1 2 3 4 5
| set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/archive) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/library) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/runtime) set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/path)
|
添加子目录
1 2
| add_subdirectory (${PROJECT_SOURCE_DIR}/lib_func)
|