CMake:避免头文件和源文件Visual Studio过滤并将cpp和h文件放在解决方案根目录上

时间:2013-10-07 23:56:08

标签: cmake

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

感谢。

2 个答案:

答案 0 :(得分:6)

您可以为source_group添加一个空字符串来实现此目的:

source_group("" FILES ${MY_TOP_LEVEL_SOURCES} ${MY_TOP_LEVEL_HEADERS})

答案 1 :(得分: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})

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