• [CMake笔记] CMake向解决方案添加源文件兼头文件


     回顾

    在上一篇笔记里总结的时候说到,aux_source_directory这个函数在添加源码文件时,是不会把头文件添加进去的,这里就介经一下另外一个方法,也是我一直使用的。

    添加文件*.cpp与*.h

    文件夹结构

    CMakeFile
      |--CMakeLists.txt
      |--main.cpp
      |--stdafx.h

    CMakeLists.txt

     1 # CMake 最低版本号要求
     2 cmake_minimum_required(VERSION 3.0)
     3 
     4 # 项目名称
     5 project(CMakeFile)
     6 
     7 # 查找指定目录下的所有.cpp与.h文件 并存放到指定变量名SC_FILES中
     8 FILE(GLOB SC_FILES "*.cpp" "*.h")
     9 
    10 # 指定生成目标
    11 add_executable(${PROJECT_NAME} ${SC_FILES})

    生成解决方案

     进阶

    很多时候,从第三方获取一些功能的源码文件,直接的做法可以放在我们自己的代码文件夹,像上面这样直接引入,但个人觉得这样不利于管理这些文件,特别是某些外部源码文件特别多的时候,就会觉得整个文件夹太多文件了, 很乱。我比较按功能,分放在不同的文件夹下进行管理,如下面我引入md5的相关代码(github就有):

    文件夹结构

    CMakeFile
      |--common
      |  |--md5
      |     |--md5.cpp
      |     |--md5.h
      |--CMakeLists.txt
      |--main.cpp
      |--stdafx.h

    修改CMakeLists.txt

     1 # CMake 最低版本号要求
     2 cmake_minimum_required(VERSION 3.0)
     3 
     4 # 项目名称
     5 project(CMakeFile)
     6 
     7 # 设置md5代码文件的路径
     8 set(MD5_FILE "./common/md5/md5.cpp" "./common/md5/md5.h")
     9 
    10 # 查找指定目录下的所有.cpp与.h文件 并存放到指定变量名SC_FILES中
    11 FILE(GLOB SC_FILES "*.cpp" "*.h")
    12 
    13 # 指定生成目标
    14 add_executable(${PROJECT_NAME} ${SC_FILES} ${MD5_FILE})

    此处需要设置一个代码文件对应的路径,最后一定要把路径的值添加到生成目标上。

    解决方案生成后

    这里,就会发现一个问题,md5的代码文件是已经实现分文件夹存放管理了,但在解决方案里还不是分组的哦,我的强迫症又要犯了。

    再进阶,解决方案源码分组

    为了解决上面的问题,治愈我的强迫症,我再去看了看CMake的手册。原来此时只要在CMakeLists.txt添加一行脚本,调用一个source_group函数就行了:

     1 # CMake 最低版本号要求
     2 cmake_minimum_required(VERSION 3.0)
     3 
     4 # 项目名称
     5 project(CMakeFile)
     6 
     7 # 设置md5代码文件的路径
     8 set(MD5_FILE "./common/md5/md5.cpp" "./common/md5/md5.h")
     9 
    10 # 查找指定目录下的所有.cpp与.h文件 并存放到指定变量名SC_FILES中
    11 FILE(GLOB SC_FILES "*.cpp" "*.h")
    12 
    13 # 对md5的源码分组到md5组里
    14 source_group(md5 FILES ${MD5_FILE})
    15 
    16 # 指定生成目标
    17 add_executable(${PROJECT_NAME} ${SC_FILES} ${MD5_FILE})

    解决方案再生成后

     

    这里需要注意的是,对CMakeList.txt的其他修改在重新生成后,VS都会提示重新加载解决方案的,但调用source_group函数时,解决方案是不会自动加载的,需要关闭VS重新打开项目。

  • 相关阅读:
    ARTS-S mac终端ftp命令行上传下载文件
    tensorflow SavedModelBuilder用法
    linux限定用户目录及权限
    软件测试准入准出规则
    weblogic 12c重置console密码
    linux exec和xargs的区别
    linux加域退域
    centos 6.6 配置xdmcp远程桌面
    shell数组中“和@的妙用
    【原创】Centos 7利用软件Raid搭建ISCSI过程
  • 原文地址:https://www.cnblogs.com/dilex/p/11102152.html
Copyright © 2020-2023  润新知