CMake 中的 include_directories 和 target_include_directories 有什么区别?

2021-12-26 00:00:00 cmake c++

我的 C++ 代码有一个目录结构,如下所示:

<代码>||->包括|->src

我正在为我的代码编写一个 CMakeLists.txt 文件.我想了解 CMakeinclude_directoriestarget_include_directories 之间的区别.

它们的用法和为了添加我的包含文件路径我应该使用哪一个有什么区别?

解决方案

include_directories(x/y) 影响目录范围.此 CMakeList 中的所有目标,以及在其调用点之后添加的所有子目录中的目标,都将路径 x/y 添加到它们的包含路径中.

target_include_directories(tx/y) 具有目标范围――它将x/y 添加到目标 t 的包含路径中.

如果您的所有目标都使用相关的包含目录,则您需要前者.如果路径特定于目标,或者您想要更好地控制路径的可见性,则您需要后者.后者来自于 target_include_directories() 支持 PRIVATEPUBLICINTERFACE 限定符的事实.>

I have a directory structure for my C++ code which goes like this :

|
|->include
|->src

I am writing a CMakeLists.txt file for my code. I want to understand the difference between include_directories and target_include_directories in CMake.

What is the difference between their usage and in order to add my include file path which one should I be using?

解决方案

include_directories(x/y) affects directory scope. All targets in this CMakeList, as well as those in all subdirectories added after the point of its call, will have the path x/y added to their include path.

target_include_directories(t x/y) has target scope—it adds x/y to the include path for target t.

You want the former one if all of your targets use the include directories in question. You want the latter one if the path is specific to a target, or if you want finer control of the path's visibility. The latter comes from the fact that target_include_directories() supports the PRIVATE, PUBLIC, and INTERFACE qualifiers.

相关文章