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} )
阅读全文
1 0
- CMake 简单教程
- CMake 教程
- Cmake教程
- cmake教程
- cmake 教程
- CMake教程
- CMake使用教程
- cmake简洁教程
- CMake使用教程
- CMake使用教程
- CMake教程及例子
- CMake使用教程 .
- Cmake使用教程
- Cmake使用教程
- CMake使用教程
- CMake 7 步教程
- CMake使用教程
- CMake快速使用教程
- Java String字符串补0或空格
- 金蝶EAS,代码实现窗口最大化,按钮可用,图标设置
- MyEclipse中Tomcat控制台打印中文乱码解决方案
- 连接linux的ftp出现“553 Could not create file.”
- register_shutdown_function
- CMake 简单教程
- 游戏服务器日志杂谈
- Paint the Roads UVALive
- python数据类型详解
- Spring Boot 入门
- Jenkins持续集成环境部署(入门篇)
- 数据表格周末行着色
- SuperSlide移动端使用注意
- SQL中N $ # @的作用'