UNITY BUILD加速cmake 编译

这篇具有很好参考价值的文章主要介绍了UNITY BUILD加速cmake 编译。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

cmake_minimum_required(VERSION 3.10.0)

project(cmake_test VERSION 0.1.0 LANGUAGES C CXX)

set(CMAKE_VERBOSE_MAKEFILE ON)

set(include_dirs

    ${CMAKE_CURRENT_LIST_DIR}

    ${CMAKE_CURRENT_LIST_DIR}/minus

    ${CMAKE_CURRENT_LIST_DIR}/sum

)

set(precompile_headers

    ${CMAKE_CURRENT_LIST_DIR}/minus/minus.h

    ${CMAKE_CURRENT_LIST_DIR}/sum/sum.h

)

##############################定义功能lib#################################

add_library(alg-obj OBJECT ${CMAKE_CURRENT_LIST_DIR}/minus/minus.c ${CMAKE_CURRENT_LIST_DIR}/sum/sum.c)

target_include_directories(alg-obj PRIVATE ${include_dirs})

add_library(my_math-obj OBJECT ${CMAKE_CURRENT_LIST_DIR}/my_math.cpp)

target_include_directories(my_math-obj PRIVATE ${include_dirs})

list(APPEND all_link_libs

alg-obj

my_math-obj)

list(APPEND unity_build_libs alg-obj my_math-obj)

# message(all_link_libs:${all_link_libs})

# list(REMOVE_ITEM all_link_libs ${unity_build_libs})

# list(APPEND all_link_libs com_lib)

# message(all_link_libs----:${all_link_libs})

##############################使用UNITY_BUILD加速编译#################################

macro(add_unity_build_lib target unity_build_libs)

    # UNITY_BUILD:将多个(UNITY_BUILD_BATCH_SIZE)源文件合并为1个源文件编译,提高编译效率

    # 1. 获取所有源文件

    foreach(lib ${unity_build_libs})

        get_target_property(TARGET_SOURCES ${lib} SOURCES)

        list(APPEND unity_build_src ${TARGET_SOURCES})

    endforeach()

    # 2. 添加新的lib

    add_library(${target} OBJECT ${unity_build_src})

    target_include_directories(${target} PRIVATE ${include_dirs})

    target_precompile_headers(${target} PUBLIC ${precompile_headers}) # 定义预编译头文件,只对该obj有效和依赖该obj的obj有效

    set_target_properties(${target} PROPERTIES UNITY_BUILD ON) # 启用UNITY_BUILD,只对该obj的源文件生效

    # 3. 替换为新的lib

    message(all_link_libs:${all_link_libs})

    list(REMOVE_ITEM all_link_libs ${unity_build_libs})

    list(APPEND all_link_libs ${target})

    message(all_link_libs:${all_link_libs})

endmacro()

add_unity_build_lib(comm_lib ${unity_build_libs})

#########################可执行文件#################################

message(all_link_libs:${all_link_libs})

add_executable(cmake_test ${CMAKE_CURRENT_LIST_DIR}/main.cpp)

target_include_directories(cmake_test PRIVATE ${include_dirs})

target_link_libraries(cmake_test PRIVATE ${all_link_libs})文章来源地址https://www.toymoban.com/news/detail-822281.html

到了这里,关于UNITY BUILD加速cmake 编译的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CMake Error: CMake was unable to find a build program corresponding to “MinGW Makefiles“.解决方案(亲测有效)

    CMake编译OpenCV4.6.0过程中一直出错: CMake Error: CMake was unable to find a build program corresponding to “MinGW Makefiles”. CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool. 解决方案如下: 将CMAKE_MAKE_PROGRAM项后面的路径设置为Qt安装路径下的路径。例如:D:/Qt/Qt5.12.12/Tools/mingw7

    2024年02月15日
    浏览(44)
  • CMake学习笔记-VSCode使用Cmake编译C++工程

    Win + MinGW + CMake + Git 官方教程1: https://cmake.org/cmake/help/latest/guide/tutorial/A%20Basic%20Starting%20Point.html 官方教程2: https://cmake.org/cmake/help/book/mastering-cmake/cmake/Help/guide/tutorial/index.html 官方练习材料1:https://github.com/Kitware/CMake.git 官方练习材料2:https://github.com/Kitware/CMake/blob/master/Help/guide

    2024年02月11日
    浏览(58)
  • CMake交叉编译配置实例

    动态库的添加: 注意: link_directories() 必须在 add_executable() 前, target_link_libraries() 必须在 add_executable() 后面 静态库的添加:

    2024年02月11日
    浏览(41)
  • cmake构建多项目编译

    最外层的主CMakeLists proj1的CMakeLists proj2的CMakeLists main.cpp proj1/hello.h proj1/hello.cpp proj2/world.h proj2/world.cpp

    2024年02月07日
    浏览(50)
  • Cmake学习记录(九)--使用Cmake交叉编译Android .so库

    注意:本教程没有关于JNI接口的写法,只是把C代码编译成适合android平台的so库,想查看完整代码可以参考文末的第9条参考链接 目前Android编译.so的话使用Android Studio比较简单,但是有时候时候Android Studio的话还需要创建一个Android的项目,这里记录下脱离Android Studio单纯使用Cma

    2024年02月12日
    浏览(40)
  • Cmake 之Android库编译

    一 检测库和执行程序能否在Android上用 1.1 我们知道Cmake不止能编译Linux库程序,也能编译出其它系统的库,如windows,ios和android等,那么上一篇生成的Linux的库程序能否直接用于Android上呢,下面先来做个测试。 1.2 我们先在Linux平台生成一个最简单的C语言可执行程序,main.c 创建

    2024年01月21日
    浏览(35)
  • Cmake 之Linux库编译

    一 camake第一列,C编译为so库 对应的CmakeList文件 二 Cmake介绍 2.1 CMake 是一个跨平台的项目构建工具,CMake可以生成各种构建系统的配置文件,包括Makefile、Visual Studio项目文件、Xcode项目文件等,可以帮助开发人员简化项目的构建过程,提高开发效率 2.2 CMake执行流程图 2.3 Cmak

    2024年01月21日
    浏览(42)
  • Go Build编译打包文件

    程序 main1.go : 打包: 执行: 程序 main2.go : 打包:打包方式和上面一样,这里只介绍linux下的打包。 执行: go build的时候还有别的其它参数,如果有需要请查询相关文档。

    2024年01月18日
    浏览(30)
  • Windows使用cmake编译dll

    CMake MinGW CMake工具负责将CMakeLists.txt配置文件转换成相关的MakeFile脚本,本身并不参与编译,而是使用MinGW工具进行编译。 在Linux系统使用CMake编译需要执行以下命令即可编译出相关产物,但在Windows要使用MinGW工具编译需要在执行cmake命令时,添加相关的参数,即 -G \\\"MinGW Makefil

    2024年02月11日
    浏览(58)
  • CMake编译CUDA项目报错

    configure后显示如下错误 CMake Error at C:/Program Files/CMake/share/cmake-3.26/Modules/CMakeDetermineCompilerId.cmake:751 (message): Compiling the CUDA compiler identification source file “CMakeCUDACompilerId.cu” failed. 同时,注意到下面报错为 C:Program FilesMicrosoft Visual Studio2022CommunityMSBuildMicrosoftVCv170BuildCustomi

    2024年02月06日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包