If another sublibrary also imports jsoncpp, `FindJsonCpp.cmake` fails with error message `add_library cannot create imported target Jsoncpp_lib because another target with the same name already exists.`. Adding the `if (NOT TARGET Jsoncpp_lib)`-guard fixes this.
It might be useful to check if there's a similar problem with other sublibraries included by Drogon.
When building an application on Windows using Drogon as a dependency and with warnings treated as errors, the FindFilesystem.cmake generates this error (in CMakeError.log):
```
src.cxx(6): error C2220: the following warning is treated as an error
src.cxx(6): warning C4477: 'printf' : format string '%s' requires an argument of type 'char *', but variadic argument 1 has type 'const std::filesystem::path::value_type *'
src.cxx(6): note: consider using '%ls' in the format string
src.cxx(6): note: consider using '%lls' in the format string
src.cxx(6): note: consider using '%Ls' in the format string
src.cxx(6): note: consider using '%ws' in the format string
```
Documentation of std::filesystem::path: value_type: character type used by the native encoding of the filesystem: char on POSIX, wchar_t on Windows
Using generic_string() fixes this warning
* Maintain compatibility with cmake generated from older drogon_ctl
* Use user-defined C++ version when possible
* C++ version detection no-longer depends on std::filesystem availability
* Link against c++fs in DrogonConfig.cmake if on those versions of GCC
* Allow DrogonConfig to use user-defined C++ version