title: how to write a cmake Module for jsoncpp?
body: <p>I want to use <strong><code>jsoncpp</code></strong> for writing a C++ code in order to parse a JSON file. Let me explain what I did. I created a <strong><code>CMakeLists.txt</code></strong> and I made a <strong><code>FindJsoncpp.cmake</code></strong> along with a simple c++ file to test <code>jsoncpp</code>. When I compile the C++ source without cmake using <code>-I/usr/include/jsoncpp/ -ljsoncpp</code> it works fine. but when I try to build it using cmake it cannot find <code>json.h</code> header file that I included in my c++ source code. </p>
  
  <p>here is my <code>CMakeLists.txt</code>:  </p>
  
  <pre><code>cmake_minimum_required (VERSION 2.6)
  project (Parser)
  
  set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
  
  include(LibFindMacros)
  
  message("----------- trying to find Jsoncpp-------------")
  find_package(Jsoncpp)
  
  if(Jsoncpp_FOUND)
      message("INFO: we found LibJsoncpp on your pc.")
      message(Jsoncpp_FOUND = ${Jsoncpp_FOUND})
      message(Jsoncpp_INCLUDE_DIR = ${Jsoncpp_INCLUDE_DIR}) 
      message(Jsoncpp_LIBRARY = ${Jsoncpp_LIBRARY})
  else(Jsoncpp_FOUND)
      message("WARNING: we couldn't find LibJsoncpp on your pc. DLC is disabled.")
  endif(Jsoncpp_FOUND)
  
  #set(LIBS ${Jsoncpp_LIBRARY})
  
  # Set the include dir variables and the libraries and let libfind_process do the rest.
  # NOTE: Singular variables for this library, plural for libraries this this lib depends on.
  set(Jsoncpp_PROCESS_INCLUDES Jsoncpp_INCLUDE_DIR)
  set(Jsoncpp_PROCESS_LIBS Jsoncpp_LIBRARY)
  
  # add the executable
  add_executable(jsonparser jsonparser.cpp)
  </code></pre>
  
  <p>And this is the <code>FindJsoncpp.cmake</code> that I wrote:</p>
  
  <pre><code># - Try to find Jsoncpp
  # Once done, this will define
  #
  #  Jsoncpp_FOUND - system has Jsoncpp
  #  Jsoncpp_INCLUDE_DIRS - the Jsoncpp include directories
  #  Jsoncpp_LIBRARIES - link these to use Jsoncpp
  
  include(LibFindMacros)
  
  # Use pkg-config to get hints about paths
  libfind_pkg_check_modules(Jsoncpp_PKGCONF jsoncpp)
  
  # Include dir
  find_path(Jsoncpp_INCLUDE_DIR
    NAMES json/json.h
  #  PATHS ./jsoncpp/
    PATHS ${Jsoncpp_PKGCONF_INCLUDE_DIRS} # /usr/include/jsoncpp/json
  )
  
  # Finally the library itself
  find_library(Jsoncpp_LIBRARY
    NAMES jsoncpp
    PATHS ${Jsoncpp_PKGCONF_LIBRARY_DIRS}
  #  PATH ./jsoncpp/
  )
  
  set(Jsoncpp_PROCESS_INCLUDES Jsoncpp_INCLUDE_DIR)
  set(Jsoncpp_PROCESS_LIBS Jsoncpp_LIBRARY)
  libfind_process(Jsoncpp)
  </code></pre>
  
  <p>And finally a simple C++ code called <code>jsonparser.cpp</code> to test it:</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;fstream&gt;
  #include &lt;json/json.h&gt;
  using namespace std;
  
  void printSongInfo(Json::Value song){
      std::clog&lt;&lt;"\n-----------printing a song-------------\n";
      std::clog&lt;&lt;"Name="&lt;&lt;song["name"];
      std::clog&lt;&lt;"Artist="&lt;&lt;song["artist"];
  }
  
  int main(){
  
      std::ifstream catalogFile("catalog.json");
  
      Json::Value root;   // will contains the root value after parsing.
      Json::Reader reader;
      bool parsingSuccessful = reader.parse( catalogFile, root );
      if ( !parsingSuccessful ){
          // report to the user the failure and their locations in the document.
          std::cout  &lt;&lt; "Failed to parse configuration\n"
                     &lt;&lt; reader.getFormattedErrorMessages();
          return 1;
      }
  
      //parsing songs
      const Json::Value songs = root["songs"];
      for ( int index = 0; index &lt; songs.size(); ++index ){  // Iterates over the sequence elements.
         printSongInfo(songs[index] );
      }
      return 0;
  }
  </code></pre>
  
  <p>When I run the <code>jsonparser.cpp</code> with below command it works just fine.</p>
  
  <pre><code>g++ -I/usr/include/jsoncpp/ -ljsoncpp jsonparser.cpp
  </code></pre>
  
  <p>but when I try to make it using <code>cmake</code> I get this error:</p>
  
  <pre><code>$~/jsoncppTest/build$ cmake ..
  -- The C compiler identification is GNU 4.7.3
  -- The CXX compiler identification is GNU 4.7.3
  -- Check for working C compiler: /usr/bin/cc
  -- Check for working C compiler: /usr/bin/cc -- works
  -- Detecting C compiler ABI info
  -- Detecting C compiler ABI info - done
  -- Check for working CXX compiler: /usr/bin/c++
  -- Check for working CXX compiler: /usr/bin/c++ -- works
  -- Detecting CXX compiler ABI info
  -- Detecting CXX compiler ABI info - done
  ----------- trying to find Jsoncpp-------------
  -- Found PkgConfig: /usr/bin/pkg-config (found version "0.26") 
  -- checking for module 'jsoncpp'
  --   found jsoncpp, version 0.6.0
  -- Found Jsoncpp 
  INFO: we found LibJsoncpp on your pc.
  Jsoncpp_FOUND=TRUE
  Jsoncpp_INCLUDE_DIR=/usr/include/jsoncpp
  Jsoncpp_LIBRARY=/usr/lib/libjsoncpp.so
  -- Configuring done
  -- Generating done
  -- Build files have been written to: ~/jsoncppTest/build
  $~/jsoncppTest/build$ make
  Scanning dependencies of target jsonparser
  [100%] Building CXX object CMakeFiles/jsonparser.dir/jsonparser.cpp.o
  ~/jsoncppTest/jsonparser.cpp:3:23: fatal error: json/json.h: No such file or directory
  compilation terminated.
  make[2]: *** [CMakeFiles/jsonparser.dir/jsonparser.cpp.o] Error 1
  make[1]: *** [CMakeFiles/jsonparser.dir/all] Error 2
  make: *** [all] Error 2
  </code></pre>
  
  <p>It cannot find <code>json/json.h</code> header file but it has founded the jsoncpp library in cmake before. I checked <code>jsoncpp.pc</code> file and found ti OK. I don't know what I am doing wrong! any help would be appreciated.</p>
  
  <p>I am using ubuntu 13.04 with multiarch support. I heard something about jsoncpp problem with 64bit compiler but don't know if that's the case.</p>