I'm currently transforming my C++ project from simply using a Makefile to using CMake. As I'm unfamiliar with CMake, I try and avoid learning "old" CMake and stick to "modern CMake" best practices, e.g. described here.
However, I could not figure out how to include a simple, header-only, third party library without getting bothered with warnings about that library.
Say I have a project structure like this:
CMakeLists.txt
src/
CMakeLists.txt
main.cpp
third-party-lib/
foo/
foo.h
Say main.cpp
uses foo
: #include <foo.h>
The problem is, I use a bunch of warning flags and foo.h
introduces some warnings that I don't care about, as I'm not the author and it's nothing serious.
In a classic Makefile I would just have written -isystem third-party-lib/foo
somewhere appropriate and be done.
In CMake, I achieved this by a include_directories(SYSTEM PRIVATE third-party-lib/foo)
in the top-level CMakeLists.txt
.
Now, according to the link above, I should keep my hands off include_directories()
to avoid hidden dependencies and I think that this is a good idea. I'd rather specify for each target that actually needs foo
to include that library and treat it as 'don't warn me here'. As I understand it, the approach would be:
- find
foo
target in top-levelCMakeLists.txt
target_link_libraries(main PRIVATE foo)
or so insrc/CMakeLists.txt
How would I achieve that, i.e. what is the command for finding, and where to specify the SYSTEM
property? Or any other suggestions for how to approach this?