码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • CMake使用小结


    根据近期的项目开发中对CMake的使用进行一些总结。

    CMake主要用于构建C++/C的工程项目,能自动配置依赖所依赖的头文件、.lib文件和.dll文件并且配置项目属性。如此,可以实现对项目工程的复用以提高开发效率。感觉CMake中很重要的一个点就是要明白相对路径的重要性。

    1.设置wchar_t为内置类型为否
     

    ADD_DEFINITIONS (/Zc:wchar_t-)

    2.添加头文件依赖的目录

    1. INCLUDE_DIRECTORIES(
    2. ${CMAKE_SOURCE_DIR}/YourHeaderFile
    3. )

    ${CMAKE_SOURCE_DIR}为最高层的CMakeLists.txt所在位置。这么写表示你要依赖的头文件是放在最高层的CMakeLists.txt所在位置的YourHeaderFile文件夹下。

    3.设置需要排除的文件夹并遍历排除

    1. set(EXCLUDED_DIRS "Hello" "World")
    2. # 遍历排除的文件夹
    3. foreach(dir ${EXCLUDED_DIRS})
    4. list(APPEND EXCLUDE_DIR_ARGS "--exclude-dir=${CMAKE_SOURCE_DIR}/${dir}")
    5. endforeach()

    如此设置,那么名为Hello跟World的文件夹及其中包含的文件都将不会被参与编译。上面也可以不遍历排除,直接一条一条排除也可以

    4.FILE GLOB+链接.lib依赖

    FILE GLOB命令主要用于匹配规则在指定的目录内匹配到所需要的文件

    1. file(GLOB USER_LIBS_PATH ${CMAKE_SOURCE_DIR}/lib/*.lib)
    2. target_link_libraries(${PROJECT_NAME} ${USER_LIBS_PATH})

    如上语句将会把目录CMakeLists.txt所在位置下的lib文件夹中所有符合*.lib(通配符方式)结尾的文件存入USER_LIBS_PATH变量中。

    target_link_libraries则是将匹配到的所有.lib文件链接到项目中。

    可参考:cmake 遍历目录获取所有文件名 - 简书

    5.file GLOB+file COPY构建.dll依赖

    .dll的依赖主要放到和生成的可执行文件在一个目录下,这个时候就需要用copy把需要链接的.dll进行拷贝放置。

    1. file(GLOB USER_DLLS_PATH ${CMAKE_SOURCE_DIR}/dll/*.*)
    2. file(COPY ${USER_DLLS_PATH} DESTINATION ${OUTPUT_DIR}/Debug)

    如上代码段会将dll文件夹中的所有文件拷贝放到Debug文件当中。

    6.设置预处理定义

    主要是用target_compile_definitions。

    总之CMake还有其他好多的功能,接下来还是需要边用边学了。

  • 相关阅读:
    android 11.0 获取当前界面的APP ,在APP的界面禁止灭屏
    【初阶数据结构】详解树和二叉树(一) - 预备知识(我真的很想进步)
    我,28岁,测试员,10月无情被辞:想给还在学测试 的人提个醒......
    一起Talk Android吧(第四百三十二回:Java8中的时间类)
    LOTO示波器 实测 开环增益频响曲线/电源环路响应稳定性
    Maven入门
    kali虚拟机上设置Metasploit数据库
    Excel——对其他工作表和工作簿的引用
    Day53【动态规划】1143.最长公共子序列、1035.不相交的线、53.最大子序和
    数仓开发之DWD层(一)
  • 原文地址:https://blog.csdn.net/qq_42987967/article/details/132875157
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号