CMakeLists常用写法

本文介绍了CMakeLists.txt的基本结构,包括添加头文件目录、链接库和宏的使用。详细讲解了如何添加系统库如OpenCV,以及自定义库的编译与链接。同时,探讨了如何在宏定义中处理不同实现,如CPU和GPU的选择,通过cmake参数灵活控制编译选项。

基本结构

cmake_minimum_required(VERSION 3.0)
project(DEMO) 
add_executable(run main.cpp)  

添加头文件目录

目录结构:

+root
	+build
    +lib
	+heads
		-func.hpp
	+src
		-func.cpp
	-main.cpp
	-CMakeLists.txt

下文所有的cmake操作都默认在build目录下执行

main.cpp中调用func中的函数。CMakeLists中需要加入头文件的查找目录,

cmake_minimum_required(VERSION 3.0)
project(DEMO)

include_directories(./heads)

add_executable(run main.cpp src/demo.cpp)

添加链接库

  • 添加系统中的库

    如添加OpenCV库

cmake_minimum_required(VERSION 3.0)
project(DEMO)  

# find_package命令会自动在系统默认lib路径下寻找所需库。
# 若该库不在系统默认路径下,或者要自定义路径,需要set一下路径
# set(OpenCV_DIR /you/path/to/OpenCVConfig.cmake)
find_package(OpenCV REQUIRED)  

add_executable(run main.cpp) 

target_link_libraries(run ${OpenCV_LIBS})  
  • 添加自定义库

    比如先把func代码编译成动态链接库,再在main.cpp中调用

cmake_minimum_required(VERSION 3.0)
project(DEMO)

# 可以指定.so文件的输出目录;否则默认为执行make操作的目录
# 注意这里的path是相对与执行cmake操作的目录
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ../lib)

include_directories(./heads)

add_library(func SHARED src/demo.cpp)

这样就会在lib目录下编译出 libfunc.so. main.cpp调用时的CMakeLists:

cmake_minimum_required(VERSION 3.0)
project(DEMO)

include_directories(./heads)
link_directories(./lib)

add_executable(run main.cpp)

target_link_libraries(run func)

添加宏

比如nms算法,有cpu和gpu两种实现:

#pragma once
#include "cpu/nms.h"

#ifdef WITH_CUDA
#include "cuda/nms.h"
#endif

WITH_CUDA如何在编译的时候添加进去呢?

可以直接在CMakeLists中添加 add_definitions(-DWITH_CUDA)

或者更灵活的通过cmake 参数来实现

option(WITH_CUDA "select to use cuda or not" ON) 
if(WITH_CUDA)
	add_definitions(-DWITH_CUDA)
	... #其它编译命令
else()
    ... #其它编译命令
endif()

add_executable(...)

cmake -DWITH_CUDA=OFF ..可以指定ON或OFF。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值