任何人都知道如何在没有 vs 过滤器的情况下将源文件和头文件放在解决方案根目录上?我将所有源子文件夹都很好地分类到 vs 过滤器中,但是源根目录中的文件将转到“头文件”和“源文件”。
谢谢。
任何人都知道如何在没有 vs 过滤器的情况下将源文件和头文件放在解决方案根目录上?我将所有源子文件夹都很好地分类到 vs 过滤器中,但是源根目录中的文件将转到“头文件”和“源文件”。
谢谢。
您可以提供一个空字符串source_group
来实现此目的:
source_group("" FILES ${MY_TOP_LEVEL_SOURCES} ${MY_TOP_LEVEL_HEADERS})
另一个答案对我来说还不够,因为它使所有文件系统层次结构变平。我不知道其他简单的解决方案,所以我只是递归了所有层次结构并相应地创建了过滤器。这样,过滤器就相当于文件系统视图:
# EXCLUDE_CURRENT to exclude source in the current directory
function(glob_source sources curdir)
glob_source_recurse(sources ${curdir} "" ${ARGN})
# Need to set sources in the parent scope https://stackoverflow.com/a/50953059/213871
set(${sources} ${${sources}} ${SOURCE_FILES} PARENT_SCOPE)
endfunction()
macro(glob_source_recurse sources curdir prefix)
subdirlist(subdirs ${curdir})
foreach(subdir ${subdirs})
if ("${prefix}" STREQUAL "")
glob_source_recurse(sources "${curdir}/${subdir}" "${subdir}")
else()
glob_source_recurse(sources "${curdir}/${subdir}" "${prefix}/${subdir}")
endif()
endforeach()
set (extra_macro_args ${ARGN})
if (NOT extra_macro_args STREQUAL "EXCLUDE_CURRENT")
file(GLOB SOURCE_FILES "${curdir}/*.cpp" "${curdir}/*.h" "${curdir}/*.hpp")
source_group("${prefix}" FILES ${SOURCE_FILES})
list(APPEND sources ${SOURCE_FILES})
endif()
endmacro()
它可以用于:
glob_source(SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR})
您可以根据需要进行编辑。