cmake构造visio studio目录

将下面代码复制到CMakeLists.txt,将CMakeList.txt拷贝到项目根目录。用cmake生成vs项目管理文件。OK。
 
cmake_minimum_required(VERSION 2.8)
#配置工程名
set(ProjectName "Project")
set(ProjectDir ${CMAKE_CURRENT_SOURCE_DIR})
 
 
#告诉CMake工程名
project(${ProjectName})
 
set(TargetName "AllFile")
 
#下面是规则需要加入的文件
#由于是GLOB_RECURSE则当前文件夹及其子文件夹中文件都会被加入进来
FILE(GLOB_RECURSE SOURCE_FILES ${ProjectDir}/*.c ${ProjectDir}/*.cc ${ProjectDir}/*.cpp ${ProjectDir}/*.h ${ProjectDir}/*.hpp ${ProjectDir}/*.rc)
 
add_executable(${TargetName} ${SOURCE_FILES})
 
#记住一定要注意整个项目的根和子项目,如果 轻易将下面宏放入子项目,而不注意项目的根目录,
#会使得得到的目录出现子项目目录与根目录齐平。
#解决这个问题的最好办法是,在整个宏运行中把 根 目录拉进来,在下面 !!!!!!!处将${cur_dir}的截断方法
#一直设置为根目录
macro(source_group_by_dir cur_dir source_files)
    if(MSVC)
        message(STATUS ${cur_dir})
        foreach(curfile ${${source_files}})
            #找到当前文件下的文件 和 子文件夹,请注意是用${cur_dir}进行截断
            #尽可能向后匹配直到最后满足的一个,
            #不是匹配到第一个就停止,匹配不到输出输入的值
            #!!!!!!!!!将下面 ${cur_dir} 一直设置为根目录, ${curfile}为绝对路径
            string(REGEX REPLACE ${cur_dir}/\(.*\) "\\1" fpath ${curfile})
                                                                           
            #message(fpath " = " ${fpath})
            #下面两句用于找出谁是文件谁是文件夹
            string(REGEX REPLACE "(.*)/(.*)" "\\1" groupname ${fpath})
            #message(groupname " = " ${groupname})
            
            string(COMPARE EQUAL ${fpath} ${groupname} nogroup) #相等为1,这里相等表示为文件
            if(nogroup)#文件
                set(groupname "")
            else()#文件夹
                string(REGEX REPLACE / "\\\\" groupname ${groupname})
            endif(nogroup)
            source_group(${groupname} FILES ${curfile})
        endforeach(curfile)
    endif(MSVC)
endmacro(source_group_by_dir)
 
source_group_by_dir(${ProjectDir} SOURCE_FILES)

 

 

 

 

posted on 2018-07-09 09:48  上善若遂  阅读(324)  评论(0)    收藏  举报

导航