Clu*_*ang 18 cmake filter visual-studio
我已经环顾四周(StackOverflow等),我正在尝试使用cmake生成Visual Studio过滤器.我有以下文件夹:
src/math
src/import
src/ui
我想生成如上所述的过滤器.
"math":包含src/math
"import"中的所有cpp&h文件
:包含src/import "ui"中的所有cpp&h文件:包含src/ui中的所有cpp&h文件
我尝试了几种解决方案,但似乎都没有工作!
这是CMakeList.txt中代码的最后一个版本:
src/math
src/import
src/ui
Run Code Online (Sandbox Code Playgroud)
欢迎任何帮助!
Flo*_*ian 27
请参见如何使用cmake为嵌套子目录设置Visual Studio过滤器
请注意
source_group()命令只能在与组合add_library()或add_executable()命令列表相同的源(的路径必须匹配)source_group()命令不会检查文件是否实际存在(因此它需要您提供的任何内容,并且在项目文件生成期间,它会尝试将给定的源组文件名与项目中使用的文件进行匹配)我通过添加相应的add_library()目标尝试了你的代码,它按预期工作(CMake 3.3.2和VS2015):
set(VD_SRC "${VisualDesigner_SOURCE_DIR}/src/visualdesigner")
file(GLOB_RECURSE SRC_UI
"${VD_SRC}/ui/*.cpp"
"${VD_SRC}/ui/*.h"
)
file(GLOB_RECURSE SRC_IMPORT
"${VD_SRC}/import/*.cpp"
"${VD_SRC}/import/*.h"
)
add_library(VisalDesigner ${SRC_UI} ${SRC_IMPORT})
source_group("ui" FILES ${SRC_UI})
source_group("import" FILES ${SRC_IMPORT})
Run Code Online (Sandbox Code Playgroud)
结果是
这是一个更加通用的版本,取自Visual Studio作为CMake友好项目的编辑器:
set(_src_root_path "${VisualDesigner_SOURCE_DIR}/src/visualdesigner")
file(
GLOB_RECURSE _source_list
LIST_DIRECTORIES false
"${_src_root_path}/*.c*"
"${_src_root_path}/*.h*"
)
add_library(VisualDesigner ${_source_list})
foreach(_source IN ITEMS ${_source_list})
get_filename_component(_source_path "${_source}" PATH)
file(RELATIVE_PATH _source_path_rel "${_src_root_path}" "${_source_path}")
string(REPLACE "/" "\\" _group_path "${_source_path_rel}")
source_group("${_group_path}" FILES "${_source}")
endforeach()
Run Code Online (Sandbox Code Playgroud)