常见cmake命令总结

常见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)
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CMake中,target_link_libraries命令用于指定链接给定目标和/或其依赖项时要使用的库或标志。它有几种形式可以使用。 1. 最常见的格式是: target_link_libraries(<target> <item>...) 这个命令将库或标志<item>链接到目标<target>上。 2. 可以使用以下格式指定链接库的使用范围: target_link_libraries(<target> <PRIVATE|PUBLIC|INTERFACE> <item>... [<PRIVATE|PUBLIC|INTERFACE> <item>...]...) 这里,PRIVATE表示链接库仅适用于目标<target>自身,PUBLIC表示链接库适用于目标<target>以及其依赖项,INTERFACE表示链接库仅适用于目标<target>的依赖项。 3. 对于同时适用于目标及其依赖项的库,可以使用以下格式: target_link_libraries(<target> <item>...) 这将链接库<item>到目标<target>及其依赖项上。 4. 对于链接给定目标及其依赖项的库,还可以使用以下格式(已弃用): target_link_libraries(<target> <LINK_PRIVATE|LINK_PUBLIC> <lib>... [<LINK_PRIVATE|LINK_PUBLIC> <lib>...]...) 这里,LINK_PRIVATE表示链接库仅适用于目标<target>及其依赖项,LINK_PUBLIC表示链接库适用于目标<target>及其依赖项。 总结起来,target_link_libraries命令用于指定在链接目标及其依赖项时使用的库或标志。可以根据需要选择不同的格式来实现所需的链接关系。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Cmakelist: add_library、target_link_libraries和link_directories用法](https://blog.csdn.net/wfei101/article/details/82633858)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [CMake中target_link_libraries的使用](https://blog.csdn.net/fengbingchun/article/details/128161746)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值