我遇到了CMake的问题,我无法将我的文件添加到Visual Studio内的文件夹/过滤器中.
# Add folders to filters
file(GLOB_RECURSE DATABASE_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/database *.cpp *.h)
file(GLOB_RECURSE LOG_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/log *.cpp *.h)
file(GLOB_RECURSE NETWORK_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/network *.cpp *.h)
file(GLOB_RECURSE THREADING_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/threading *.cpp *.h)
file(GLOB_RECURSE UTILS_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/utils *.cpp *.h)
source_group(database FILES ${DATABASE_SRCS})
source_group(log FILES ${LOG_SRCS})
source_group(network FILES ${NETWORK_SRCS})
source_group(threading FILES ${THREADING_SRCS})
source_group(utils FILES ${UTILS_SRCS})
Run Code Online (Sandbox Code Playgroud)
可能导致此问题的一个问题是,它将GLOB_RECURSE返回${CMAKE_CURRENT_SOURCE_DIR}相对于/database(或其他任何目录)的文件.
例如,有一个database/被调用的文件dbcore.cpp.此文件被添加为DATABASE_SRCSas dbcore.cpp,但主目录(即${CMAKE_CURRENT_SOURCE_DIR})中的文件也会被添加,但是具有相对于的路径database/,例如../common.h.
另一个问题可能是Visual Studio项目内部已存在默认的"头文件"和"源文件"过滤器.
我正在使用CMake 2.8.6和Visual Studio 11/2012.
要避免file(GLOB_RECURSE...每次都返回所有文件的调用,请使用以下内容:
file(GLOB_RECURSE DATABASE_SRCS
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/database/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/database/*.h)
Run Code Online (Sandbox Code Playgroud)
这将设置的值DATABASE_SRCS,以database/dbcore.cpp;database/dbcore.h;...这将使你的source_group电话正常工作.
但是,从以下文档file(GLOB:
我们不建议使用GLOB从源树中收集源文件列表.如果在添加或删除源时没有更改CMakeLists.txt文件,则生成的构建系统无法知道何时请求CMake重新生成.
要查看完整详细信息,请运行
cmake --help-command file
Run Code Online (Sandbox Code Playgroud)
列出项目文件的常用方法是手动将它们添加到CMakeLists.txt.
要回答最后一个问题,如果Visual Studio的默认"头文件"和"源文件"为空(即所有文件都显示在其他文件夹中),则不会显示.这些默认值的存在不会影响使用的任何文件夹source_group.
| 归档时间: |
|
| 查看次数: |
19270 次 |
| 最近记录: |