CMake笔记



  • CMake

    它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件

    linux平台使用cmake流程

    1. 编写 CMake 配置文件 CMakeLists.txt 。
    2. 执行命令 cmake CMakeListPath 生成 Makefile
    3. 使用 make 命令进行编译。make使用

    编写CMakeList.txt文件

    基本版

    #CMake 最低版本号要求
    cmake_minimum_required (VERSION 2.8)
    #项目信息
    project (project_name)
    #指定生成目标
    add_executable(target_name main.c)
    
    #CMake 最低版本号要求
    cmake_minimum_required (VERSION 2.8)
    #项目信息
    project (project_name)
    # 使用变量
    set(SOURCE_FILES file1.c file2.c main.c)
    set(SOURCE_FILES file1.c file2.c main.c [apend ...]) # 追加方式添加
    #指定生成目标
    add_executable(target_name ${SOURCE_FILES})
    

    添加源文件目录

    # 添加源文件目录
    aux_source_directory(srcPath DIR_SRCS)
    # 指定生成目标
    add_executable(target_name ${DIR_SRCS})
    

    添加头文件目录

    # 包含头文件目录
    include_directories(includeFilePath)
    

    添加子目录

    子目录中也有有一个CMakeList.txt,子目录下生成一个链接库

    # 查找当前目录源文件,将名称
    aux_source_directory(srcPath DIR_SRCS)
    
    # 生成链接库
    add_library(library_name ${DIR_SRCS})
    

    在主函数中添加链接库

    add_excutable(target_name ${SRCS})
    # 在指定生成目标之后添加链接库
    target_link_library(target_name ${library_name})
    

    添加链接库

    link_libraries(library_name1 library_name2) # 所有编译目标都链接的库
    
    link_directories(DLLPath) # 指定动态链接库的搜索路径
    
    target_link_libraries(target_name ${BOOST_LIBRARIES}) # 添加链接库
    
    # 在指定目录中搜索一个库,并且包含在变量中
    find_library(MY_LIB library_name1 libraryPath) # 查找并添加动态库(添加一部分)
    

    其它

    设置编译参数
    add_definitions("-Wall -g")
    
    添加编译依赖
    add_dependencies()
    
    设置目标属性
    set_target_properties()
    # eg:
    set_target_properties(${project_name} PROPERTIES
            SOVERSION 0.0.1
            PUBLIC_HEADER "include/gtstack.h;include/gttypes.h"
    	)
    
    设置版本号
    set(VERSION_MAJOR 1) # 最大的版本编号
    set(VERSION_MINOR 0) # 其次于major的版本号
    set(VERSION_PATCH 0) # 其次于minor的版本号
    set(VERSION_TWEAK 0) # 其次于patch的版本号
    
    # 版本号:MAJOR.MINOR.PATCH.TWEAK (semver语义化版本号的规则)
    
    输出信息
    message([SEND_ERROR | STATUS | FATAL_ERROR] “message to display”)
    
    语法
    LESS,GREATER,EQUAL # 数字比较
    STRLESS、STRGREATER、STREQUAL # 字符串比较
    
    # 条件判断
    if(CONDITION1)
    ...
    elseif(CONDITION2)
    ...
    else(CONDITION3)
    ...
    endif
    
    # 1 循环实现1
    foreach(loop_var arg1 arg2...)
    	...
    endforeach(loop_var)
    
    # 2 循环实现2
    foreach(loop_var RANGE total)
    	...
    endforeach(loop_var)
    # 3 循环实现3
    foreach(loop_var RANGE start stop [step])
    	...
    endforeach(loop_var)
    # 4 循环实现4
    foreach(loop_var IN [LISTS [list1 [...]]] [ITEMS [item1 [...]]])
    	...
    endforeach(loop_var)
    
    # while循环实现
    while(CONDITION)
    	...
    endwhile(CONDITION)
    
    # Logic operation
    if(FALSE AND (FALSE OR TRUE))
    	...
    endif()
    


  • mark一下



  • 学到了!!



  • 可以的 mark一哈



  • 优秀泊哥,学习了



  • 可以可以,再加个实例就更好了!



  • 大佬们说笑了


  • 项目组组长

    超棒,对最近的操作系统课设很有帮助



  • @zhangxin 操作系统用的是makefile。。cmake的执行的文件是cmakelists.txt



  • 收藏了,泊哥厉害



  • 干脆把操作系统课设来个一条龙教程



  • 收藏一下♬


 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

与 Dian 的连接断开,我们正在尝试重连,请耐心等待