June
24th,
2018
1、基本要素
PROJECT(main)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
AUX_SOURCE_DIRECTORY(. DIR_SRCS) ## 获取目录中的源文件到变量
FILE(GLOB SOURCE "./*.cpp") ## 直接指明源文件
ADD_EXECUTABLE(main ${DIR_SRCS}) ## 编译目录中的源文件,变成可执行文件main
2、多级目录,先添加子目录,再链接;字母,子目录中编译共享库
## 主目录
ADD_SUBDIRECTORY( src )
TARGET_LINK_LIBRARIES( main Test )
## 子目录
AUX_SOURCE_DIRECTORY(. DIR_TEST1_SRCS)
ADD_LIBRARY ( Test ${DIR_TEST1_SRCS})
3、使用其他库
例如需要库文件libxxx.so和头文件xxx.h,需要在根目录中创建cmake/modules/Findlibxxx.cmake
MESSAGE(STATUS "Using bundled Findlibdb.cmake...") ## 输出参数内容
FIND_PATH( ## 头文件查找路径 find_path(<VAR> name1 [path1 path2 ...])
LIBDB_CXX_INCLUDE_DIR
db_cxx.h
/usr/include/
/usr/local/include/
)
FIND_LIBRARY( ## 库文件查找路径
LIBDB_CXX_LIBRARIES NAMES db_cxx
PATHS /usr/lib/ /usr/local/lib/
)
主目录中CMakeList.txt
SET(CMAKE_MODULE_PATH ${CMAKE_ROOT}/Modules ${CMAKE_SOURCE_DIR}/cmake/modules) ## 设置CMAKE_MODULE_PATH
FIND_PACKAGE(libxxx REQUIRED) ## FIND_PACKAGE从CMAKE_MODULE_PATH中查找Findlibxxx.cmake
MARK_AS_ADVANCED( ## 设置高级变量(在GUI高级变量中显示)
LIBXXX_INCLUDE_DIR
LIBXXX_LIBRARIES
)
IF (LIBDB_CXX_INCLUDE_DIR AND LIBDB_CXX_LIBRARIES) ## 判断,如果有高级变量
INCLUDE_DIRECTORIES(${LIBXXX_INCLUDE_DIR}) ## 加入include路径与lib路径
TARGET_LINK_LIBRARIES(main ${LIBXXX_LIBRARIES})
ENDIF (LIBDB_CXX_INCLUDE_DIR AND LIBDB_CXX_LIBRARIES)