[✔️]CMake生成的VisualStudio项目,Qt的头文件目录默认添加了编译选项,如何在添加到c++头文件目录

437 阅读2分钟

如题,这个问题其实困扰了我非常久,我也做了非常多的尝试,以下的这几个命令都试过了

target_include_directories()
include_directories()

使用以上命令,当你添加Qt模块后,Qt的头文件始终在命令行的编译选项里面,这就导致visual studio无法正常提示qt的相关代码,编写qt接口时非常难受。 image.png

直到后来,我尝试着添加了SYSTEM属性后,发现目录也出现在了编译选项里面

target_include_directories(myapp SYSTEM PRIVATE /path/to/include)

所以我就断定Qt内部的代码肯定有类似的逻辑,但是并没有在Qt的cmake文件中发现类似的逻辑。

顺着这个思路往下走,既然头文件目录已经添加到编译选项了,那如何修改目录的属性,让他添加到c++头文件目录呢?

chat-gpt告诉我,使用 target_compile_options 命令将 /path/to/include 目录添加到编译器的系统搜索路径中:

target_compile_options(myapp PRIVATE "-isystem /path/to/include")

除了 -isystem 选项之外,还有其他一些用于添加头文件搜索路径的编译器选项。这些选项通常具有不同的行为,并且可以根据您的需要进行选择。

下面是几个常见的用于添加头文件搜索路径的编译器选项:

  1. -I <path>: 将 <path> 目录添加到编译器的普通头文件搜索路径中。
  2. -isystem <path>: 将 <path> 目录添加到编译器的系统头文件搜索路径中。与 -I 不同,-isystem 选项会将头文件目录标记为系统目录,这意味着编译器不会产生警告信息。
  3. -idirafter <path>: 将 <path> 目录添加到编译器的后备头文件搜索路径中。当编译器在其他搜索路径中找不到所需的头文件时,它会尝试在后备搜索路径中查找头文件。
  4. -include <filename>: 在编译器预处理期间将 <filename> 文件包含在每个源代码文件中。这个选项可以用来强制编译器使用指定的头文件,例如在移植代码时可能需要使用。

除了上述选项之外,某些编译器可能还提供其他特定于平台或编译器的选项来处理头文件搜索路径。

最终问题也迎刃而解,使用

target_compile_options(myapp PRIVATE "-I/path/to/include")

image.png

这样子,visual studio就能丝滑的提示qt相关的接口了!