常见cmake命令总结
cmake常见命令
- cmake_minimum_required - 指定CMake的最小版本要求
cmake_minimum_required (VERSION 2.8)
- project - 定义工程名称
project (PROJECT_NAME)
- set - 显式的定义变量
set(SRC main.cpp hello.cpp)
# 将main.cpp和hello.cpp定义为SRC
- 添加编译器参数
add_compile_options(-Wall -std=c++17 -O2 -g)
# 这是对于所有的编译器增加的编译器参数,如果想只针对g++编译器可以用下面这个命令
set(CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -g -O2 -std=c++17")
- 搜索目录下的源文件并定义变量
aux_source_directory(. SRC)
# 搜索当前目录下的源文件定义为SRC
- CMAKE_BUILD_TYPE 编译类型(Debug, Release)
set(CMAKE_BUILD_TYPE Debug)
- 添加头文件搜索路径
#相当于-I命令
include_directories(./include /usr/build/include)
- 添加库文件搜索路径
#相当于-L命令
link_directories(/usr/build/lib ./lib)
- add_library生成库文件
# add_library(libname [SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)
add_library(hello SHARED ${SRC})
- 生成可执行文件
add_executable(main ${SRC} main.cpp)
- 动态链接库
#相当于-l命令
# add_library(hello SHARED ${SRC})
target_link_libraries(main hello)
# 将动态库hello链接到可执行文件main
- 添加子文件夹路径
add_subdirectory(src)
# 子文件夹中必须也有CMakeLists.txt
示例
项目文件夹目录:
src子文件夹:
test子文件夹:
utils子文件夹:
项目主文件夹的CMakeLists.txt:
project (feature_detection)
cmake_minimum_required(VERSION 3.0)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
find_package(OpenCV 4.5.1 REQUIRED)
MESSAGE ( STATUS "OpenCV library status:" )
MESSAGE ( STATUS "version ${OpenCV_VERSION}" )
MESSAGE ( STATUS "libraries ${OpenCV_LIBS}" )
MESSAGE ( STATUS "include path ${OpenCV_INCLUDE_DIRS}" )
include_directories(${OpenCV_INCLUDE_DIRS})
include_directories(${CMAKE_SOURCE_DIR}/src)
include_directories(${CMAKE_SOURCE_DIR}/utils)
add_subdirectory(utils)
add_subdirectory(src)
add_subdirectory(test)
src子文件夹CMakeLists.txt:
add_library(LoG LoG.cpp)
target_link_libraries(LoG ${OpenCV_LIBS} utils)
add_library(harris_corner harris_corner.cpp)
target_link_libraries(harris_corner ${OpenCV_LIBS} utils)
add_library(canny canny.cpp)
target_link_libraries(canny ${OpenCV_LIBS} utils)
utils子文件夹CMakeLists.txt:
add_library(utils
display.cpp
tictoc.cpp
opencv_utils.cpp
)
target_link_libraries(utils ${OpenCV_LIBS})
test子文件夹CMakeLists.txt:
add_executable(test_LoG test_LoG.cpp)
target_link_libraries(test_LoG LoG ${OpenCV_LIBS} utils)
add_executable(test_harris_corner test_harris_corner.cpp)
target_link_libraries(test_harris_corner harris_corner ${OpenCV_LIBS} utils)
add_executable(test_canny test_canny.cpp)
target_link_libraries(test_canny canny ${OpenCV_LIBS} utils)