.so 依赖目录 cmake_CMake 的研究与学习笔记

cmake是一个跨平台项目生成工具,他根据不同的平台从源代码中生成相应的项目工程,可以生成包括makefile,vs等项目文件。

CMake的使用

以生成makefile为例 cmake dir : 将在dir中寻找CMakeLists.txt文件,并在当前所在目录生成工程文件 make : 在当前目录寻找makefile文件,对整个工程项目进行构建

CMakeLists.txt

这个文本文件描述了需要生成的源文件,以及怎么生成项目文件。 通过一系列的指令描述。

指令

project (name)

创建两个变量: - _BINARY_DIR : 二进制文件保存目录 - _SOURCE_DIR : 源代码目录

set (var val)

设置变量

add_executable (name srclist)

name为需要编译成的可执行文件的名称
srclist为需要编译的源文件列表

add_library (name [SHARED|STATIC|MODULE] scrlist)

生成库文件 name 为生成的库文件的名称.
scrlist 为需要编译的源文件.
[SHARED|STATIC|MODULE] 制定为动态/静态库.

add_subdirectory (src_dir [binary_dir] [EXCLUDE_FROM_ALL])

添加源文件子目录

set_target_properties (target1 target2 ...PROPERTIES prop1 value1 prop2 value2 ...)

设置目标属性

include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...)

添加头文件搜索目录 [AFTER|BEFORE]来决定是添加到所有目录之前还是之后

link_directories(dirs)

添加库文件搜索目录

add_definitions (d)

添加宏定义

add_dependencies (target depend-target1 ...)

添加依赖 确保target会在depend-target之后才编译

aux_source_directory (dir var)

搜索dir目录下的所有源文件然后添加到var变量中去

target_link_libraries (target libs)

将target链接库文件

message ([SEND_ERROR | STATUS | FATAL_ERROR] messages)

输出消息

cmake_minimum_required(VERSION2.5 FATAL_ERROR)

设置cmake的最低要求版本为2.5

exec_program (exe_dir ARGS ... OUTPUT_VARIABLE ... RETURN_VALUE ...)

执行程序,传入参数ARGS,输出OUTPUT_VARIABLE,返回RETURN_VALUE

include (cmake_file)

加载CMakeLists.txt文件或cmake预定义模块

find_*

  • find_file (<VAR> name path...) 寻找文件储存到var中
  • find_library (<VAR> name path...)
  • find_path (<VAR> name path...)
  • find_program (<VAR> name path...)
  • find_package (<name> [major.minor] [QUIET][NO_MODULE] [[REQUIRED|COMPONENTS] [componets...]]) : 调用Find.cmake模块

install (TARGETS ... [[ARCHIVE|LIBRARY|RUNTIME] [DESTINATION <dir>][PERMISSIONS permissions...][CONFIGURATIONS[Debug|Release|...]][COMPONENT <component>][OPTIONAL]] [...])

将target安装到指定目录,需要使用指令make install

内置变量

  • CMAKE_MAJOR_VERSION
  • CMAKE_MINOR_VERSION
  • CMAKE_PATCH_VERSION
  • CMAKE_SYSTEM : 系统名称
  • CMAKE_SYSTEM_NAME : 不包括版本号的系统名称
  • CMAKE_SYSTEM_VERSION
  • CMAKE_SYSTEM_PROCESSOR : 处理器
  • UNIX : 包括mac 和 cygwin
  • WIN32 : 包括cygwin
  • CMAKE_C_FLAGS : c编译选项
  • CMAKE_CXX_FLAGS : cxx编译选项

流程控制

  • IF(cond) ELSEIF(cond) ENDIF(cond)
  • WHILE(cond) ENDWHILE(cond)
  • FOREACH(loop_var arg1 arg2 ...) ENDFOREACH(loop_var)
  • FOREACH(loop_var RANGE start stop [step]) ENDFOREACH(loop_var)
  • FOREACH(loop_var RANGE total) ENDFOREACH(loop_var)

杂项

  • 可以通过${变量名}来获取变量的值

一个实例

cmake_minimum_required (VERSION 3.12)

project (FirstTestApp)

#设置编译flags
set(CMAKE_C_FLAGS "-m64")
set(CMAKE_CXX_FLAGS "-std=c++11 -m64")
set(LIB_DIR "/opt/local/lib")

#添加头文件目录和库文件目录
include_directories(. /opt/local/include ./classes ./components ./math ./singletons)
link_directories(${LIB_DIR})

#添加源文件
aux_source_directory(. SRC_LIST)
aux_source_directory(./classes SRC_LIST)
aux_source_directory(./components SRC_LIST)
aux_source_directory(./math SRC_LIST)
aux_source_directory(./singletons SRC_LIST)
aux_source_directory(./glad/src SRC_LIST)

#message(STATUS ${SRC_LIST})
message(STATUS "[MSG]system:${CMAKE_SYSTEM}")

set(FirstTestApp_BINARY_DIR ${FirstTestApp_BINARY_DIR}/output)
message(${FirstTestApp_BINARY_DIR})

#添加可执行文件
add_executable(FirstTestApp ${SRC_LIST})

#寻找相应的库文件
find_library(GLFW_LIB glfw3 ${LIB_DIR})
find_library(OPENGL_LIB OpenGL ${LIB_DIR})
find_library(COCOA_LIB Cocoa ${LIB_DIR})
find_library(IOKIT_LIB IOKit ${LIB_DIR})
find_library(COREFOUNDATION_LIB CoreFoundation ${LIB_DIR})
find_library(COREVIDEO_LIB CoreVideo ${LIB_DIR})

#执行链接
target_link_libraries(FirstTestApp ${GLFW_LIB} GL X11 pthread Xrandr Xi dl ${OPENGL_LIB} ${COCOA_LIB} ${IOKIT_LIB} ${COREFOUNDATION_LIB} ${COREVIDEO_LIB})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值