CMakeLists.txt编写及常用命令
C/C++项目跨平台编译时,CMake经常用到,在windows的vs中配置工程则直接在属性中配置相应的三方头文件及库很方便,通过编写CMakeLists.txt同样可以实现这种工程依赖的配置。
一、常用命令
1)指定cmake最低版本:
cmake_minimum_required(VERSION 2.8)
2)指定项目名称:
project(cmakefirst C CXX)
3)设置C/C++编译选项
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS" }
4)附加包含目录(第三方依赖头文件目录)
include_directories(usr/local/cuda/include)
5) 附加库目录(第三库目录)
link_directories(usr/local/lib)
6) 添加三方依赖(opencv、cuda之类的)
find_package( OpenCV REQUIRED )
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(opencv_Test ${OpenCV_LIBS})
7) 指定需要编译的代码
(1)第一种方式
aux_source_directory("./src" src) #所有源文件(src目录下)赋值给变量src
(2)第二种方式
file(GLOBTEST_SRC ${CMAKE_CURRENT_LIST_DIR}/src/*.h
${CMAKE_CURRENT_LIST_DIR}/src/*.cpp)
set(TEST_COMPILE_CODE ${TEST_SRC})
8)编译为动态库
add_library(opencv_Test SHARED ${TEST_COMPILE_CODE})
9)编译为静态库
add_library(opencv_Test STATIC ${TEST_COMPILE_CODE})
10)编译为可执行文件
add_executable(opencv_Test ${TEST_COMPILE_CODE})
11)链接第三方库
target_link_libraries(opencv_Test ${TEST_LINKER_LIBS})
#空格并添加相应的库(windows下为库的名称
#opencv_world310,ubuntu下为库的名称及其后缀,如#libcaffe.so)
#如果没有添加库目录则直接带上库的路径及库名称
12)设置输出目录(根据需要选则使用)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY your path)
2、一个demo
#第一CMake方式的学习案例:仅仅是依赖OPENCV的三方库
#功能:读取并显示图片
#作者:Sygoing
#日期:2018.11.29
#1.cmake verson,指定cmake的最小版本号
cmake_minimum_required(VERSION 2.8)
#2.project name,指定项目的名称,一般和项目的文件夹名称对应
project(cmakefirst C CXX)
#3.set environment variable,设置环境变量
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
#-------此处为三方依赖的头文件 对应VS属性的常规包含目录---------
#4.include头文件目录
include_directories(${CMAKE_CURRENT_LIST_DIR}/3rdparty/include/Opencv
${CMAKE_CURRENT_LIST_DIR}/3rdparty/include/Opencv/opencv
${CMAKE_CURRENT_LIST_DIR}/3rdparty/include/Opencv/opencv2
)
#-------此处为三方依赖的Lib文件所在目录以及具体依赖的Lib文件名列表---------
#5.library目录及name名称
link_directories(${CMAKE_CURRENT_LIST_DIR}/3rdparty/lib)
list(APPEND TEST_LINKER_LIBS opencv_world320)
#-------此处为本项目需要编译的头文件和源文件---------
#6.source directory源文件目录
file(GLOB TEST_SRC ${CMAKE_CURRENT_LIST_DIR}/src/*.h
${CMAKE_CURRENT_LIST_DIR}/src/*.cpp)
set(TEST_COMPILE_CODE ${TEST_SRC})
#-------设置编译模式:可执行文件、动态库、静态库---------
#7.1.add executable file,编译为可执行文件
add_executable(cmakefirst ${TEST_COMPILE_CODE})
#7.2.add library file,编译为动态库
# add_library(opencv_Test SHARED ${TEST_COMPILE_CODE})
#8.add link library,添加工程所依赖的库
target_link_libraries(cmakefirst ${TEST_LINKER_LIBS})