CMake教程9:cocos2d-x的CMake逻辑分析

简介: CMake教程9:cocos2d-x的CMake逻辑分析
  1. CMake起点:cocos2d-x/CMakeLists.txt
# 设置module的查找目录
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/Modules/")
include(BuildModules)
# 调用过程
BuildModules()
复制代码
  1. 设置lib:cmake/Modules/BuildModules.cmake
# 设置lib变量... 
# xxhash
if(USE_PREBUILT_LIBS OR USE_SOURCES_EXTERNAL)
  add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/external/xxhash)
  # 设置_INCLUDE_DIRS、_LIBRARIES等变量
  set(XXHASH_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/external/xxhash)
  set(XXHASH_LIBRARIES xxhash)
else()
  cocos_find_package(xxhash xxhash REQUIRED)
endif()
# 开始真正的项目lib添加
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/cocos)
复制代码
  1. 将lib引入到项目中:cocos2d-x/cocos/CMakeLists.txt
# 引入lib
foreach(pkg XXHASH ... )
  cocos_use_pkg(cocos2dInternal ${pkg})
endforeach()
复制代码
  1. cocos_use_pkg的实现在cmake/Modules/CocosBuildHelper.cmake
function(cocos_use_pkg target pkg)
    set(prefix ${pkg})
    set(_include_dirs  ${${prefix}_INCLUDE_DIRS})
    # 将头文件目录加入到项目中
    include_directories( ${_include_dirs} )
    set(_library_dirs ${${prefix}_LIBRARY_DIRS})   
    # 将库文件目录加入到项目中
    link_directories(${_library_dirs})
    set(_libs ${${prefix}_LIBRARIES})
    # 链接lib
    target_link_libraries(${target} ${_libs})
    # 宏定义
    set(_defs ${${prefix}_DEFINITIONS})
    add_definitions(${_defs})
endfunction()
复制代码

与第2步设置_INCLUDE_DIRS_LIBRARIES等变量前后呼应。


目录
相关文章
|
6月前
|
IDE Linux 开发工具
在Qt开发环境中qmake和cmake的区别优势
选择qmake还是CMake,主要取决于项目的需求和开发者的熟悉程度。如果你正在开发一个纯Qt项目,或者是一个不需要复杂构建脚本的小型项目,qmake可能是一个更好的选择。反之,如果你的项目需要处理复杂的依赖关系,或者你想要一个在多种编程环境中都能工作的构建系统,那么CMake可能是更好的选择。
964 2
|
5月前
|
自然语言处理 Linux C++
make和Cmake都有什么区别?(内附使用详解)
make: 是一个构建工具,它的任务是读取 Makefile 文件,并基于这些文件中的指令执行具体的构建操作。Makefile 文件包含了如何构建项目的规则,make 负责解析这些规则并执行必要的命令来编译和链接源代码,生成可执行文件或库。 CMake: 是一个构建系统生成器。它并不直接进行编译或链接,而是根据项目中 CMakeLists.txt 文件的内容生成一个或多个构建系统的描述文件(如 Makefile 或 Visual Studio 解决方案)。CMake 提供了一种更高级、更抽象的方式来描述构建过程,这使得它能够跨平台地生成各种构建系统。
490 0
|
7月前
|
编译器 Linux 开发者
【cmake 交叉编译配置设置】CMAKE_TOOLCHAIN_FILE:跨平台编译的秘密武器
【cmake 交叉编译配置设置】CMAKE_TOOLCHAIN_FILE:跨平台编译的秘密武器
783 0
|
Java Linux 编译器
CMake从入门到弃坑
CMake 说明 cmake的定义是什么 ?-----高级编译配置工具 当多个人用不同的语言或者编译器开发一个项目,最终要输出一个可执行文件或者共享库(dll,so等等)这时候神器就出现了-----CMake!
142 1
|
C++
CMake教程8:在Vscode中使用CMake
CMake教程8:在Vscode中使用CMake
826 0
|
算法 Linux C++
[笔记]CMake学习
[笔记]CMake学习
CMake实战(二)
上一篇《CMake实战(一)》我们是把所有文件放在同一个目录下,而平常开发时,我们会将源文件进行分类,放到不同的目录下。接下来我们来看一下具体要怎么操作。
CMake教程10:编写CMake中遇到的问题
CMake教程10:编写CMake中遇到的问题
1224 0
|
iOS开发
CMake教程7:安装与编译
CMake教程7:安装与编译
418 0
|
Unix C++ 开发者
CMake 入门教程
CMake 入门教程
512 0
CMake 入门教程