码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • cmake如何将源文件按照指定的组织方式进行分组,在IDE例如vistual stdio或者xcode项目工程文件中展示和管理这些源文件


    1、我们先来看下面的一个项目的结构

    TestGroup工程下面的main.cpp同级的有两个文件夹,到时候我们想在IDE比如xcode或者visual stdio2019中也显示这样的结构怎么弄呢(答案是用cmake中的source_group函数)

    2、假如没有用source_group生成的xcode工程是怎么样的,看下面的CMakeLists.txt文件

    1. cmake_minimum_required(VERSION 3.6)
    2. set(APP_NAME "cc_app")
    3. project(${APP_NAME})
    4. file(GLOB CC_SOURCES
    5. ${CMAKE_CURRENT_LIST_DIR}/*.cpp
    6. ${CMAKE_CURRENT_LIST_DIR}/*.h
    7. ${CMAKE_CURRENT_LIST_DIR}/log/*.cpp
    8. ${CMAKE_CURRENT_LIST_DIR}/log/*.h
    9. ${CMAKE_CURRENT_LIST_DIR}/common/*.cpp
    10. ${CMAKE_CURRENT_LIST_DIR}/common/*.h
    11. )
    12. include_directories(${CMAKE_CURRENT_LIST_DIR}/log)
    13. include_directories(${CMAKE_CURRENT_LIST_DIR}/common)
    14. add_executable(${APP_NAME} ${CC_SOURCES})

    利用cmake -G"Xcode" ..

    生成的xcode工程目录为

    发现这个工程没有了log目录跟common目录

    3、通过用cmake中的source_group函数来解决就好了,我们添加一个宏

    1. cmake_minimum_required(VERSION 3.6)
    2. # 添加source_group函数宏,用户建立目录结构
    3. macro(source_group_by_dir source_files)
    4. set(sgbd_cur_dir ${CMAKE_CURRENT_SOURCE_DIR}/)
    5. foreach(sgbd_file ${${source_files}})
    6. string(REGEX REPLACE ${sgbd_cur_dir} "" sgbd_fpath ${sgbd_file})
    7. string(REGEX REPLACE "[^/\\\\]+$" "" sgbd_group_name ${sgbd_fpath})
    8. if(sgbd_group_name)
    9. string(REPLACE "/" "\\\\" sgbd_group_name_normal ${sgbd_group_name})
    10. source_group(${sgbd_group_name_normal} FILES ${sgbd_file})
    11. endif(sgbd_group_name)
    12. endforeach(sgbd_file)
    13. endmacro(source_group_by_dir)
    14. set(APP_NAME "cc_app")
    15. project(${APP_NAME})
    16. file(GLOB CC_SOURCES
    17. ${CMAKE_CURRENT_LIST_DIR}/*.cpp
    18. ${CMAKE_CURRENT_LIST_DIR}/*.h
    19. ${CMAKE_CURRENT_LIST_DIR}/log/*.cpp
    20. ${CMAKE_CURRENT_LIST_DIR}/log/*.h
    21. ${CMAKE_CURRENT_LIST_DIR}/common/*.cpp
    22. ${CMAKE_CURRENT_LIST_DIR}/common/*.h
    23. )
    24. #对文件目录进行组织
    25. source_group_by_dir(CC_SOURCES)
    26. include_directories(${CMAKE_CURRENT_LIST_DIR}/log)
    27. include_directories(${CMAKE_CURRENT_LIST_DIR}/common)
    28. add_executable(${APP_NAME} ${CC_SOURCES})

    最终xcode项目的结构就成了

    这样的话就让项目目录的组织就更加整齐合理了。

  • 相关阅读:
    谷粒学苑 Vue +NUXT +SpringCloud 部署到服务器
    [Python急救站]基于Transformer Models模型完成GPT2的学生AIGC学习训练模型
    创立一年就估值5亿美金,这个项目是怎么做到的?
    队列的两种实现方式---数组+链表
    六、函数和变量的命名
    JAVA设计模式6:代理模式,用于控制对目标对象的访问
    MS5192T/MS5193T——低噪声、低功耗、16/24 位∑-ΔADC
    洛谷刷题C语言:娘子、淘气的猴子、Ranker、暴龙的火锅、Cupcake Party
    字节携港大南大升级 LLaVA-NeXT:借 LLaMA-3 和 Qwen-1.5 脱胎换骨,轻松追平 GPT-4V
    一个失败架构升级案例
  • 原文地址:https://blog.csdn.net/weixin_38261823/article/details/136265225
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号