CMake 简单教程

来源:互联网 发布:叶子流量卡淘宝店地址 编辑:程序博客网 时间:2024/06/06 07:03

更新或安装CMake

sudo add-apt-repository ppa:george-edison55/cmake-3.xsudo apt-get updatesudo 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})# 指定头文件路径,类似 -Iinclude_directories(./include  ./)# 指定库文件路径,类似 -LLINK_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用于判断numberIF(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 lineLIST(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} )
原创粉丝点击