Почему cmake не разрешает <> стиль включать?
Я очень новичок в 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>
Однако файлы распознаются визуальной студией только тогда, когда я делаю следующее:
#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, поскольку ссылки в каждом заголовке выполняются в форме <>, которая что вызывает эту ошибку:
xscallbackplainc.h:68:10: fatal error: xstypes/pstdint.h: No such file or directory
#include <xstypes/pstdint.h>
^~~~~~~~~~~~~~~~~~~
при компиляции.
Вкратце, мне действительно просто нужно знать, какая команда (будь то в CMakeLists.txt или где-то еще) будет разрешать такие ссылки внутри проекта и скомпилированного проекта через ssh в Linux. Я знаю разницу между#include ""
а также #include <>
, Однако я новичок в cmake, везде искал и не могу найти ответа.
2 ответа
Самый простой способ добиться этого - использовать include_directories
команда. Просто добавьте следующее в свойANT/CMakeLists.txt
:
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
Хотя я очень рекомендую использовать target_include_directories()
вместо. Разница между ними в том, чтоtarget_include_directories()
указывает подключаемые каталоги только для одной цели[1].
[1]. Цель что - либо определено через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})
Я разместил вопрос о ссылках, надеюсь, это имеет смысл. Должно быть ясно, что я не знаю, что делаю.