如何使用CMake设置VC++目录

3
Visual Studio 2010及以上版本提供了在VC++目录部分配置系统目录的功能。有没有办法告诉CMake来填写这些设置,而不是使用C/C++/附加包含目录?
3个回答

2

自从cmake 3.12版本以后,你可以使用变量像CMAKE_VS_SDK_INCLUDE_DIRECTORIES来设置“VC++包含目录”。


0

正如Min所说,现在可以设置CMAKE_VS_SDK_INCLUDE_DIRECTORIES。谢谢Min!

我会留下一个工作示例,供下一个像我一样来到这里的人参考。

cmake_minimum_required(VERSION 3.18)

# ...

if (MSVC)
    # Example for a library that only exports as module without xxx_DIRS variables.
    get_target_property(SDL2_image_INCLUDE_DIRS SDL2_image::SDL2_image INTERFACE_INCLUDE_DIRECTORIES)

    # Join all include dependencies in a list
    set(_DEPS_DIRS ${SDL2_INCLUDE_DIRS} ${SDL2_image_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS})

    # Make all slashes turn into backslashes
    cmake_path(CONVERT "${_DEPS_DIRS}" TO_NATIVE_PATH_LIST _NATIVE_DIRS NORMALIZE)

    # Set the "VC++ Directories > Include Directories" setting
    set(CMAKE_VS_SDK_INCLUDE_DIRECTORIES "$(VC_IncludePath);$(WindowsSDK_IncludePath)" ${_NATIVE_DIRS})

    unset(_DEPS_DIRS)
    unset(_NATIVE_DIRS)
endif()

重要提示:在进行故障排除之前,请删除构建文件夹并从头开始。

我相信以前(v3.18之前?)cmake会将列表添加到“附加包含目录”设置中,但我认为他们已经删除了它,因为这些是使用/I编译器选项添加的,而现在似乎包含的依赖关系是通过/external:I添加的,如果您查看项目中的命令行设置,它们可能会冲突。没有得到确认,这只是一个想法。

不要仅为此使用target_include_directoriesinclude_directories。对于模块,您不应该需要使用它,只有在您已经必须使用它时才使用它。

即使可能,也不应将所有标头作为依赖项包含在add_executable中,这很不方便。


0

只需在您的CMakeLists.txt中添加以下代码行:

include_directories(-your-include-folder-)

如果您想设置库目录,请添加以下行:

link_directories(-your-library-folder-)

4
遗憾的是,include_directories 命令将路径添加到 "C/C++/Additional Include Directories" 而不是 "VC++ Directories/Include Directories" 中。自 VS2010 以来,后者是首选方式,一些工具如 VAssist 也仅使用这些路径。 - Steffen Roeber
2
嗯,我已经使用Visual Assist和由CMake生成的Visual Studio项目超过6年了,从来没有出现任何问题。 - drescherjm
1
遇到了同样的问题。这会影响智能感知。 - Francisco Aguilera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接