CMake实践笔记


参考cmake实践


写这篇文章主要是为了个人的整理和记录。
开发环境转到linux后,(针对c/c++)就无法避免makefile,然后就学习了cmake的使用。


初试 cmake – cmake 的 helloworld

主要掌握的内容:
1)一个简单的CMakeLists.txt:
内容:
//cmake的版本号
cmake_minimum_required(VERSION 2.8)
//项目的名字
project(hello_demo)
//设置变量,使用变量 SRC_LIST来表示一串文件
SET(SRC_LIST src1.c src2.c …)
//生成可执行文件,可执行文件的名字叫做hello(这个名字自己定),相关的文件(.c .cxx)
ADD_EXECUTABLE(hello ${SRC_LIST})。

2)两个默认变量 PROJECT_BINARY_DIR和 PROJECT_SRC_DIR,可执行程序所在目录, 源文件所在目录。
3)MESSAGE([SEND_ERROR|STATUS|FATAL_ERROR] “message to show” …)
SEND_ERROR,产生错误,生成过程被跳过。
SATUS ,输出前缀为 — 的信息
FATAL_ERROR,立即终止所有 cmake 过程.
4)查看make的过程,可以使用 make VERBOSE = 1
5)指令大小写无关,变量大小写相关
6)基本的两条语法:
1、使用变量的方式${};2、指令(参数1 参数2)
7)使用make clean 清理
8)外部构建,一般不会在源码中直接cmake,常用的方式:mkdir build ,cd build cmake ..。

更好一点的 Hello World
主要掌握的内容:
1)工程文件一般包括的内容:include src doc README
2)主目录调用子目录
ADD_SUBDIRECTORY(source_dir [binary_dir][exclude_from_all])一般子目录当生成可执行文件,动态库,静态库时需要单独的CMakeLists.txt。
3)通过SET命令指定最终可执行程序或者库所在的dir,方式如下:
SET(EXECUTABLE_OUTPUT_PATH PROJECTBINARYDIR/bin)SET(LIBRARYOUTPUTPATH {PROJECT_BINARY_DIR}/lib),这两条命令放在哪个CMakeLists.txt中,谁有ADD_EXECUTABLE() 或者ADD_LIBRARY(),放谁那
4)使用INSTALL命令。
1、生成动态库或者静态库,需要安装到需要的目录,
INSTALL(TARGETS DESTINATION)
TARGET 指静态库ARCHIVE,动态库 LIBRATY,可执行二进制程序 RUNTIME
例如:INSTALL(TARGET myrun mylib mystaticlib RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION libstatic)
这样在 CMAKE -DCMAKE_INSTALL_PREFIX = /tmp/,就可以设置目录
2、普通文件安装到特定目录INSTALL(FILES files DESTINATION)


静态库与动态库的构建
1)命令:ADD_LIBRARY(lib_name SHARED|STATIC src1 src2 …srcn)
2)同时无法构造相同名字的动态库和静态库,需要使用命令将一个改名
SET_TARGET_PROPERTIES(target1 target2 target…. PROPERTIES) prop1 value1 prop2 valu2…),该命令还可以设置动态库的版本
SET_TARGET_PROPERTIES( hello_static PROPERTIES OUTPUT_NAME “hello” )

SET_TARGET_PROPERTIES(hello PROPERTIES VERSION 1.2 SOVERSION 1)
其中 VERSION指动态版本 SOVERSION指API版本


如何使用外部的共享库和头文件


1)一般使用INCLUDE_DIRECTORIES(header_path)向工程添加多个特定的头文件搜索路径
2)使用命令LINK_LIBRARY(lib1 lib2…)或者LINK_DIRECTORIES(),添加库所在的路径,
TARGET_LINK_LIBRARIES(target lib 1 lib2 …)添加库
3)使用特殊的环境变量
CMAKE_INCLUDE_PATH和 CMAKE_LIBRARY_PATH设置库相关的头文件和库,使户式如下:export CMAKE_INCLUDE_PATH =/home/vobile/code/ cmake ..


cmake常用指令

扫描二维码关注公众号,回复: 2192179 查看本文章

1)ADD_DEFINITIONS
2)ADD_DEPENDENCIES
3)AUX_SOURCE_DIRECTORY
4)FIND

FIND_FILE() FIND_LIBRARY() FIND_PATH() FIND_PROGRAM() FIND_PACKAGE()

FIND_LIBRARY(libx x11 /usr/lib)
IF(NOT libx)
MESSAGE(FATAL ERROR “libx not found”)
ENDIF(NOT libx)

猜你喜欢

转载自blog.csdn.net/sangky/article/details/53027071