cmake如何将源文件按照指定的组织方式进行分组,在IDE例如vistual stdio或者xcode项目工程文件中展示和管理这些源文件

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

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

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

cpp 复制代码
cmake_minimum_required(VERSION 3.6)

set(APP_NAME "cc_app")

project(${APP_NAME})

file(GLOB CC_SOURCES
${CMAKE_CURRENT_LIST_DIR}/*.cpp
${CMAKE_CURRENT_LIST_DIR}/*.h
${CMAKE_CURRENT_LIST_DIR}/log/*.cpp
${CMAKE_CURRENT_LIST_DIR}/log/*.h
${CMAKE_CURRENT_LIST_DIR}/common/*.cpp
${CMAKE_CURRENT_LIST_DIR}/common/*.h
)

include_directories(${CMAKE_CURRENT_LIST_DIR}/log)
include_directories(${CMAKE_CURRENT_LIST_DIR}/common)

add_executable(${APP_NAME} ${CC_SOURCES})

利用cmake -G"Xcode" ..

生成的xcode工程目录为

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

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

cpp 复制代码
cmake_minimum_required(VERSION 3.6)

# 添加source_group函数宏,用户建立目录结构
macro(source_group_by_dir source_files)       
	set(sgbd_cur_dir ${CMAKE_CURRENT_SOURCE_DIR}/)
	foreach(sgbd_file ${${source_files}})
		string(REGEX REPLACE ${sgbd_cur_dir} "" sgbd_fpath ${sgbd_file})
		string(REGEX REPLACE "[^/\\\\]+$" "" sgbd_group_name ${sgbd_fpath})
		if(sgbd_group_name)
			string(REPLACE "/"   "\\\\"  sgbd_group_name_normal ${sgbd_group_name})
			source_group(${sgbd_group_name_normal} FILES ${sgbd_file})
		endif(sgbd_group_name)	
	endforeach(sgbd_file)
endmacro(source_group_by_dir)

set(APP_NAME "cc_app")

project(${APP_NAME})

file(GLOB CC_SOURCES
${CMAKE_CURRENT_LIST_DIR}/*.cpp
${CMAKE_CURRENT_LIST_DIR}/*.h
${CMAKE_CURRENT_LIST_DIR}/log/*.cpp
${CMAKE_CURRENT_LIST_DIR}/log/*.h
${CMAKE_CURRENT_LIST_DIR}/common/*.cpp
${CMAKE_CURRENT_LIST_DIR}/common/*.h
)

#对文件目录进行组织
source_group_by_dir(CC_SOURCES)

include_directories(${CMAKE_CURRENT_LIST_DIR}/log)
include_directories(${CMAKE_CURRENT_LIST_DIR}/common)

add_executable(${APP_NAME} ${CC_SOURCES})

最终xcode项目的结构就成了

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

相关推荐
Digitally4 分钟前
如何高效安全地将 iPhone 与 Mac 同步
安全·macos·iphone
程序员允诺7 分钟前
办公 WiFi 二次隔离下的远程桌面解决方案实践(Mac → Win11)
macos
hudawei99621 分钟前
win和Mac在创建python虚拟环境,启动环境等操作的异同
windows·python·macos·虚拟环境
2501_9160088927 分钟前
没有 Mac 如何在 Windows 上创建 iOS 应用描述文件
android·macos·ios·小程序·uni-app·iphone·webview
提笔忘字的帝国11 小时前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
stevenzqzq14 小时前
ctrl +B和ctrl+shift +B的区别
android·ide·android studio
数据雕塑家17 小时前
【网络故障排查实战】多台机器互ping异常:MAC地址冲突引发的网络“薛定谔猫“现象
网络·macos
深念Y18 小时前
删除IDEA中的JDK列表项
java·ide·jdk·intellij-idea·idea·sdk
安全渗透Hacker19 小时前
IDEA 中主流 API 插件对比及实操建议
java·ide·intellij-idea
不爱编程爱睡觉19 小时前
vscode下载/常用插件分享及如何链接Ubuntu
ide·vscode·ubuntu