Почему cmake не разрешает <> стиль включать? - PullRequest
1 голос
/ 12 июля 2020

Я новичок в 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
.
.
.

Включения, которые мне нужны, находятся в папке three xs, и я считаю, что на них нужно ссылаться с помощью <> как в Visual Studio, так и при компиляции кода в linux , поскольку ссылки в каждом заголовке выполняются в форме <>, что и вызывает эту ошибку:

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

при компиляции.

Вкратце, мне просто нужно знать, какая команда ( будь то в CMakeLists.txt или где-то еще) позволит такого рода ссылки внутри проекта и скомпилированного проекта через s sh на linux. Я знаю разницу между #include "" и #include <>, однако я новичок в cmake, везде искал и не могу найти ответа.

Ответы [ 2 ]

2 голосов
/ 12 июля 2020

Самый простой способ добиться этого - использовать команду include_directories. Просто добавьте в свой ANT/CMakeLists.txt следующее:

include_directories(${CMAKE_CURRENT_SOURCE_DIR})

Хотя я настоятельно рекомендую использовать вместо него target_include_directories(). Разница между ними в том, что target_include_directories() определяет каталоги включения только для одного target [1].

[1]. A 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})
0 голосов
/ 13 июля 2020

Я разместил вопрос о ссылках, надеюсь, это имеет смысл. Должно быть ясно, что я не знаю, что делаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...