CMake 简单教程

更新或安装CMake

sudo add-apt-repository ppa:george-edison55/cmake-3.x
sudo apt-get update
sudo apt-get install cmake

样例

更多变量查询地址

无感的命令

# project的名称
project (Caffe_Framework)
# 最低版本限制
cmake_minimum_required (VERSION 3.0) 
# 获取`CMakeList.txt`所在目录
set(ProjDIR ${CMAKE_CURRENT_LIST_DIR})

设置一些开关或者变量

常用
+ set(a "hello")
该命令不会重写cache中的值
+ set(a "hello" CACHE)
如果cache存在该变量,使用cache中变量
如果cache中不存在,将该值写入cache
note: 仿佛CMAKE_开头的变量都会自带一个空的”“CACHE, 例如如果通过这条命令给CMAKE_BUILD_TYPE赋值,可能不会改变它的值,它仍然会用最开始的空CACHE.
+ set(a "hello" CACHE FORCE)
不论cache中是否存在,始终使用该值

# 显示所有编译命令
set(CMAKE_VERBOSE_MAKEFILE on)
# 安装路径前缀,之后的`install()`命令都安装在该路径下
set(CMAKE_INSTALL_PREFIX "~/build" CACHE PATH "" FORCE)
# 在执行cmake的目录生成一个lib文件夹,之后生成的lib会放在此文件夹下
set(LIBRARY_OUTPUT_PATH ./lib)
IF(CMAKE_BUILD_TYPE STREQUAL "")
    SET(CMAKE_BUILD_TYPE Release CACHE STRING "default to Release" FORCE)   
ENDIF()

编译命令

# 选择一个目录下的所有源代码
aux_source_directory(./src/ SRC_FILES_1)
# 选择另一个目录下的所有源代码
aux_source_directory(./src/math SRC_FILES_2)
# 为visual studio的源码设置文件结构(不设置的话所有源码都在一个目录)
source_group(src FILES ${SRC_FILES_1})
source_group(src\\math FILES ${SRC_FILES_2})
# 指定头文件路径,类似 -I
include_directories(./include  ./)
# 指定库文件路径,类似 -L
LINK_DIRECTORIES(./lib ${a}/lib)
# 添加静态库
add_library(libname ${SRC_FILES_1} ${SRC_FILES_2})
# 为某目标添加依赖库
TARGET_LINK_LIBRARIES(libname lib1 -Wl,--whole-archive -lcnn -Wl,--no-whole-archive lib2)
# 设置安装路径
SET(CMAKE_INSTALL_PREFIX /usr/local)
# 安装至CMAKE_INSTALL_PREFIX下的目录
install(TARGETS libname ARCHIVE DESTINATION lib )
install(DIRECTORY include/ DESTINATION include FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp")
# 分支判断。字符串判断必须用STREQUAL。EQUAL用于判断number
IF(str STREQUAL "hello")
ENDIF()
# 添加子目录,EXCLUDE_FROM_ALL表示不会自动编译子目录
ADD_SUBDIRECTORY(./demo EXCLUDE_FROM_ALL)
# 添加依赖
ADD_DEPENDENCIES(target-name depend-target1 depend-target2 .. )

奇技淫巧

搜索所有源代码,删除指定的一个

file(GLOB_RECURSE PROJ_CPP_SOURCES
    ${ProjDIR}/include/*.h 
    ${ProjDIR}/include/*.hpp 
    ${ProjDIR}/src/*.h
    ${ProjDIR}/src/*.hpp
    ${ProjDIR}/src/*.cpp
    ${ProjDIR}/src/*.cc
    )
source_group_by_dir( PROJ_CPP_SOURCES  ProjDIR )
IF(DEL_ONE)
    LIST( REMOVE_ITEM  PROJ_CPP_SOURCES ${ProjDIR}/src/lucky_one.cpp)
ENDIF()

为Visual Studio配置

#Debug Release 使用不同配置
TARGET_LINK_LIBRARIES( faceDetction
        $<$<CONFIG:Debug>:opencv_core2411d>
        $<$<CONFIG:Release>:opencv_core2411>
        $<$<CONFIG:Debug>:opencv_imgproc2411d>
        $<$<CONFIG:Release>:opencv_imgproc2411>
        $<$<CONFIG:Debug>:opencv_highgui2411d>        
        $<$<CONFIG:Release>:opencv_highgui2411>
        otherlibs
)

Split File into lines

file(READ "./.git/logs/HEAD" GIT_LOGS)
STRING(REGEX REPLACE ";" "\\\\;" GIT_LOGS "${GIT_LOGS}")
STRING(REGEX REPLACE "'" "-" GIT_LOGS "${GIT_LOGS}")
STRING(REGEX REPLACE "\n" ";" GIT_LOGS "${GIT_LOGS}")
# get the last line
LIST(REVERSE GIT_LOGS )
LIST(GET GIT_LOGS  1 GIT_LOGS)

debug后缀

set_target_properties(target PROPERTIES DEBUG_POSTFIX _d)

下拉选框

set(__core_names "FastCNN" "NvCaffe" "BaseForwardCNN")
set(__core_name_default "FastCNN")
set(TOPNI_CORE_NAME ${__core_name_default} CACHE STRING "Select core architecture.")
set_property( CACHE TOPNI_CORE_NAME PROPERTY STRINGS "" ${__core_names} )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值