Visual Studio 2010及以上版本提供了在VC++目录部分配置系统目录的功能。有没有办法告诉CMake来填写这些设置,而不是使用C/C++/附加包含目录?
正如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_directories
或include_directories
。对于模块,您不应该需要使用它,只有在您已经必须使用它时才使用它。
即使可能,也不应将所有标头作为依赖项包含在add_executable
中,这很不方便。
只需在您的CMakeLists.txt
中添加以下代码行:
include_directories(-your-include-folder-)
如果您想设置库目录,请添加以下行:
link_directories(-your-library-folder-)