LINUX.ORG.RU

cmake настроить jsoncpp

 ,


0

1

jsoncpp в системе установлен

$ ls /usr/lib/x86_64-linux-gnu/cmake/jsoncpp
jsoncppConfig.cmake  jsoncppConfig-none.cmake

$ pkg-config --cflags --libs jsoncpp
-I/usr/include/jsoncpp -ljsoncpp

Пытаюсь найти

find_package(jsoncpp)

Как вычислить правильные имена для заголовочных файлов и бибилиотек?

message("=== Jsoncpp: "
        "\n jsoncpp_FOUND = " ${jsoncpp_FOUND}
        "\n    jsoncpp_INCLUDE_DIRS = " ${jsoncpp_INCLUDE_DIRS}
        "\n    jsoncpp_INCLUDE_DIR = " ${jsoncpp_INCLUDE_DIR}
        "\n    jsoncpp_LIBRARIES = " ${jsoncpp_LIBRARIES}
        "\n    jsoncpp_LIBRARY = " ${jsoncpp_LIBRARY}
        "\n    jsoncpp_lib = " ${jsoncpp_lib})

=== Jsoncpp: 
 jsoncpp_FOUND = 1
    jsoncpp_INCLUDE_DIRS = 
    jsoncpp_INCLUDE_DIR = 
    jsoncpp_LIBRARIES = 
    jsoncpp_LIBRARY = 
    jsoncpp_lib = 

P.S. если самому установить переменные, то все работает, конечно же

set(jsoncpp_INCLUDE_DIR "/usr/include/jsoncpp")
set(jsoncpp_LIBRARY "jsoncpp")



Последнее исправление: cppprogger (всего исправлений: 1)
Ответ на: комментарий от cppsektant
$ cat /usr/lib/x86_64-linux-gnu/cmake/jsoncpp/jsoncppConfig.cmake 
# Generated by CMake 3.6.2

if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5)
   message(FATAL_ERROR "CMake >= 2.6.0 required")
endif()
cmake_policy(PUSH)
cmake_policy(VERSION 2.6)
#----------------------------------------------------------------
# Generated CMake target import file.
#----------------------------------------------------------------

# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)

# Protect against multiple inclusion, which would fail when already imported targets are added once more.
set(_targetsDefined)
set(_targetsNotDefined)
set(_expectedTargets)
foreach(_expectedTarget jsoncpp_lib jsoncpp_lib_static)
  list(APPEND _expectedTargets ${_expectedTarget})
  if(NOT TARGET ${_expectedTarget})
    list(APPEND _targetsNotDefined ${_expectedTarget})
  endif()
  if(TARGET ${_expectedTarget})
    list(APPEND _targetsDefined ${_expectedTarget})
  endif()
endforeach()
if("${_targetsDefined}" STREQUAL "${_expectedTargets}")
  unset(_targetsDefined)
  unset(_targetsNotDefined)
  unset(_expectedTargets)
  set(CMAKE_IMPORT_FILE_VERSION)
  cmake_policy(POP)
  return()
endif()
if(NOT "${_targetsDefined}" STREQUAL "")
  message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n")
endif()
unset(_targetsDefined)
unset(_targetsNotDefined)
unset(_expectedTargets)


# Compute the installation prefix relative to this file.
get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
# Use original install prefix when loaded through a
# cross-prefix symbolic link such as /lib -> /usr/lib.
get_filename_component(_realCurr "${_IMPORT_PREFIX}" REALPATH)
get_filename_component(_realOrig "/usr/lib/x86_64-linux-gnu/cmake/jsoncpp" REALPATH)
if(_realCurr STREQUAL _realOrig)
  set(_IMPORT_PREFIX "/usr/lib/x86_64-linux-gnu/cmake/jsoncpp")
endif()
unset(_realOrig)
unset(_realCurr)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)

# Create imported target jsoncpp_lib
add_library(jsoncpp_lib SHARED IMPORTED)

set_target_properties(jsoncpp_lib PROPERTIES
  INTERFACE_INCLUDE_DIRECTORIES "/usr/include/jsoncpp"
)

# Create imported target jsoncpp_lib_static
add_library(jsoncpp_lib_static STATIC IMPORTED)

set_target_properties(jsoncpp_lib_static PROPERTIES
  INTERFACE_INCLUDE_DIRECTORIES "/usr/include/jsoncpp"
)

# Load information for each installed configuration.
get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
file(GLOB CONFIG_FILES "${_DIR}/jsoncppConfig-*.cmake")
foreach(f ${CONFIG_FILES})
  include(${f})
endforeach()

# Cleanup temporary variables.
set(_IMPORT_PREFIX)

# Loop over all imported files and verify that they actually exist
foreach(target ${_IMPORT_CHECK_TARGETS} )
  foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
    if(NOT EXISTS "${file}" )
      message(FATAL_ERROR "The imported target \"${target}\" references the file
   \"${file}\"
but this file does not exist.  Possible reasons include:
* The file was deleted, renamed, or moved to another location.
* An install or uninstall procedure did not complete successfully.
* The installation package was faulty and contained
   \"${CMAKE_CURRENT_LIST_FILE}\"
but not all the files it references.
")
    endif()
  endforeach()
  unset(_IMPORT_CHECK_FILES_FOR_${target})
endforeach()
unset(_IMPORT_CHECK_TARGETS)

# This file does not depend on other imported targets which have
# been exported from the same project but in a separate export set.

# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)

cppprogger
() автор топика
Ответ на: комментарий от abcq

В исходниках cmake, который у меня в системе, есть FindJsonCpp, я его могу как-то просто подключить?

cmake-3.17.3/Source/Modules/FindJsonCpp.cmake
cppprogger
() автор топика
Ответ на: комментарий от cppprogger

ну да схожим образом как и для SDL https://github.com/aminosbh/sdl2-cmake-modules/blob/master/README.md тут есть пример для SDL у вас будет что-то похожее, можете его. Ну и ради интереса просто посмотрите внутрь этого FindJsonCpp.cmake

Хотя в принципе вроде вам уже подсказали что делать, в README тоже самое написано, только относительно SDL.

abcq ★★
()
Ответ на: комментарий от abcq

Спасибо, напрямую заголовочные файлы и библиотеку нашел, пока вроде хватит

find_library(JsonCpp_LIBRARY
  NAMES jsoncpp
  )
find_path(JsonCpp_INCLUDE_DIR
  NAMES json/json.h
  PATH_SUFFIXES jsoncpp
  )
message(${JsonCpp_INCLUDE_DIR})
message(${JsonCpp_LIBRARY})

/usr/include/jsoncpp
/usr/lib/x86_64-linux-gnu/libjsoncpp.so

Интересно, в Window это сработает?

cppprogger
() автор топика
Последнее исправление: cppprogger (всего исправлений: 1)
Ответ на: комментарий от cppprogger

смотря что там в этом FindJsonCpp.cmake написано, скорей нет чем да, но утверждать не буду, надо смотреть.

Напрямую конечно не то, просто надо разобраться с этим финдом по подобию.

https://github.com/open-source-parsers/jsoncpp/issues/455 вот это еще возможно поможет раз вы системный jsoncpp используете.

я бы на вашем месте вообще просто склонировал исходники и сам собрал статическую библиотеку, так точно будет работать везде где вы ее соберете, там дел меньше чем на минуту, получите свой libjsoncpp.a да влинкуете его прямо в бинарный файл.

abcq ★★
()
Ответ на: комментарий от cppprogger

Лол. jsoncpp_lib[_static] => jsoncpp_lib или jsoncpp_lib_static, в зависимости от того, что нужно, динамика или статика. Ты почитал бы уже доку по cmake.

cppsektant
()
Ответ на: комментарий от cppsektant

Лол. jsoncpp_lib[_static] => jsoncpp_lib или jsoncpp_lib_static

так не работает же

find_package(jsoncpp)
message("=== Jsoncpp: "
        "\n jsoncpp_FOUND = " ${jsoncpp_FOUND}
        "\n    jsoncpp_lib_static = " ${jsoncpp_lib_static}
        "\n    jsoncpp_lib = " ${jsoncpp_lib})

=== Jsoncpp: 
 jsoncpp_FOUND = 1
    jsoncpp_lib_static = 
    jsoncpp_lib = 

cppprogger
() автор топика
Последнее исправление: cppprogger (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.