为什么 cmake 不允许 <> 样式包含?

Why won't cmake permit <> style include?

我是 cmake 的新手,但我在 Visual Studio 上使用它来开发必须在 linux 上 运行 的程序。我需要以这种方式包括以下内容:

#include <xscontroller/xscontrol_def.h>
#include <xscontroller/xsdevice_def.h>
#include <xscontroller/xsscanner.h>
#include <xstypes/xsoutputconfigurationarray.h>
#include <xstypes/xsdatapacket.h>
#include <xstypes/xstime.h>
#include <xscommon/xsens_mutex.h>

但是,当我执行以下操作时,文件只能被 visual studio 识别:

#include "xscontroller/xscontrol_def.h"
#include "xscontroller/xsdevice_def.h"
#include "xscontroller/xsscanner.h"
#include "xstypes/xsoutputconfigurationarray.h"
#include "xstypes/xsdatapacket.h"
#include "xstypes/xstime.h"
#include "xscommon/xsens_mutex.h"

我在 VS 中的项目结构相当简单:

ANT
-out
-xscommon
-xscontroller
-xstypes
-ANT.cpp
-CMakeLists.txt
.
.
.

我需要的包含在三个 xs 文件夹中,我相信它们必须在 visual studio 和代码编译到 linux 时用 <> 引用,作为参考在每个 header 中都以 <> 形式完成,这就是导致此错误的原因:

xscallbackplainc.h:68:10: fatal error: xstypes/pstdint.h: No such file or directory
 #include <xstypes/pstdint.h>
          ^~~~~~~~~~~~~~~~~~~

编译时。

简而言之,我真的只需要知道什么命令(无论是在 CMakeLists.txt 还是其他地方)将允许在 linux 上通过 ssh 在项目和编译项目中进行这种引用.我知道 #include ""#include <> 之间的区别,但是我是 cmake 的新手,并且到处都找不到答案。

最简单的方法是使用 include_directories 命令。只需将以下内容添加到您的 ANT/CMakeLists.txt:

include_directories(${CMAKE_CURRENT_SOURCE_DIR})

不过我强烈建议改用 target_include_directories()。两者的区别在于target_include_directories()只为一个target[1].

指定include目录

[1]。 target 是通过 add_executable()add_library():

指定的任何内容
cmake_minimum_required(VERSION 3.12)

project(ANT)

add_executable(ANT ANT.cpp) #other source files as necessary

#format of target_include_directories:
# target_include_directories(target_name PUBLIC|PRIVATE PATH_TO_DIR) 

target_include_directories(ANT PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

我已经发布了有关链接的问题,希望它有意义。应该清楚我不知道我在做什么。