9

任何人都知道如何在没有 vs 过滤器的情况下将源文件和头文件放在解决方案根目录上?我将所有源子文件夹都很好地分类到 vs 过滤器中,但是源根目录中的文件将转到“头文件”和“源文件”。

谢谢。

4

2 回答 2

7

您可以提供一个空字符串source_group来实现此目的:

source_group("" FILES ${MY_TOP_LEVEL_SOURCES} ${MY_TOP_LEVEL_HEADERS})
于 2013-10-08T07:33:26.570 回答
0

另一个答案对我来说还不够,因为它使所有文件系统层次结构变平。我不知道其他简单的解决方案,所以我只是递归了所有层次结构并相应地创建了过滤器。这样,过滤器就相当于文件系统视图:

# 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})

您可以根据需要进行编辑。

于 2020-03-04T08:45:52.767 回答