how to write a cmake Module for jsoncpp?
Ok, I have a solution that compiles fine on my system. Finding jsoncpp is tricky, because json-c installs a header with the same name, and on my system, that header is located under /usr/include/json/json.h. To get it work, you have to make the following changes:
in FindJsoncpp.cmake:
# Include dir
find_path(Jsoncpp_INCLUDE_DIR
NAMES json/features.h
PATH_SUFFIXES jsoncpp
PATHS ${Jsoncpp_PKGCONF_INCLUDE_DIRS} # /usr/include/jsoncpp/json
)
Searching for json/features.h instead of json/json.h avoids finding the json.h file of json-c on my system, which is not compatible.
in CMakeLists.txt :
include_directories(${Jsoncpp_INCLUDE_DIR})
add_executable(jsonparser jsonparser.cpp)
target_link_libraries(jsonparser ${Jsoncpp_LIBRARY})
Here the found directories are set up, so CMake actually uses them.
in jsonparser.cpp:
const Json::Value songs = root["songs"];
for ( int index = 0; index < songs.size(); ++index ){ // Iterates over the sequence elements.
std::clog<<"Name="<<songs[index]["name"];
std::clog<<"Artist="<<songs[index]["artist"];
}
Your orginal code didn't compile, so I replaced the offending piece with the code above. Have you forgot to declare the song variable?
I also removed the getFormattedErrorMessages() call, because I have only jsoncpp 0.5.0, in which that function is not available. That shouldn't make a difference though.
Let me know if this works for you.
jsoncpp
now builds with cmake
.
cmake -DCMAKE_BUILD_TYPE=debug -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -G "Unix Makefiles" ../..
- supports
pkg-config
- builds static lib, dynamic lib, or both
- can be included into other projects
If you have suggestions, open an issue at GitHub.