#visual-studio #cmake #conan
Вопрос:
Я пытаюсь создать кроссплатформенное приложение (Linux/Windows), которое использует сторонние зависимости, например jsoncpp
. В Linux я использую cmake
, в Windows я использую Visual Studio
Conan
. Существует проблема, связанная с тем, что пути к заголовкам cpp различаются в разных операционных системах. В Linux я включаю jsoncpp вот так:
#include <jsoncpp/json/config.h>
#include <jsoncpp/json/value.h>
Но в Windows мне приходится использовать другие способы:
#include <json/config.h>
#include <json/value.h>
В Windows Конан устанавливает заголовки по пути (префикса jsoncpp нет).:
C:UsersUser.conandatajsoncpp1.9.0theirixstablepackage3fb49604f9c2f729b85ba3115852006824e72cabincludejson
Содержание conaninfo.txt файл:
[requires]
jsoncpp/1.9.0@theirix/stable
[generators]
MSBuildDeps
Есть способ использовать пути включения, как в Linux? Без такого уродливого кода:
#ifdef __linux__
#include <jsoncpp/json/config.h>
#include <jsoncpp/json/value.h>
#else
#include <json/config.h>
#include <json/value.h>
#endif
Ответ №1:
Для Linux добавьте явный путь включения в параметры компилятора, чтобы включить jsoncpp, так что #include <json/config.h>
это тоже будет работать.
То есть,
target_include_directories(yourprogram PRIVATE /usr/include/jsoncpp)
Вместо этого используйте ${JSONCPP_INCLUDE_DIRS}
или аналогично, если вы использовали CMake для поиска библиотеки для вас.
Но почему бы не использовать Conan и в Linux? Если вы испытываете трудности в Windows, вам может быть полезно использовать единую платформу управления зависимостями повсюду.