我正在将一个大型库项目从Linux移植到Windows。幸运的是,我们甚至在移植前甚至远程使用CMake,因此不需要进行太多调整。
我认为在Windows上本地开发Windows部件以便于测试可能是一个好主意,因此我使用CMake-gui创建了一个VS Studio
我的项目组织如下:
lib /#库源代码 包括/ mylib /#可公开安装的头文件
在顶部的CMakeLists.txt中,我添加了
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
所以我的内部源文件就像外部应用程序一样包含标题。
现在的问题如下:Visual Studio 2015在许多系统头中的"外部引用" -directory中显示公共头文件。哪个头文件属于项目并不明显。
如何使VS显示与系统包含的公共标题?
答案 0 :(得分:2)
将我的评论转化为答案
您希望在Visual Studio项目中由CMake
显式列出的所有头文件都必须在CMake
目标的源列表中列为源文件。
然后,您可以通过source_group(... FILES/REGULAR_EXPRESSION ...)
命令对这些源/标头进行分组。
如果您有多个目标并且您不希望每次都手动添加这些步骤,您可以考虑将它们分组到function()
:
function(my_add_library _target)
file(
GLOB_RECURSE _header_list
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
"${CMAKE_SOURCE_DIR}/include/*.h*"
)
add_library(${_target} ${ARGN} ${_header_list})
target_include_directories(${_target} PRIVATE "${CMAKE_SOURCE_DIR}/include")
source_group("Public Headers" FILES ${_header_list})
endfunction(my_add_library)
注意:
file(GLOB ...)
来收集标题,而不是来源(请参阅Why is cmake file GLOB evil?)include_directories()
命令保留在主CMakeLists.txt
中,我更喜欢特定于目标的target_include_directories()
变体有关在CMake
中对源/标头文件进行分组的详细信息,请参阅:
作为一般参考: