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)
浙公网安备 33010602011771号