[CMake] target_sources vs. PUBLIC_HEADER for libraries

Michael Ellery mellery451 at gmail.com
Fri Oct 11 15:33:17 EDT 2019


I’d like to make sure I understand two different aspects of header files management for libraries:

(1) typically you can add header files to target_sources, but it’s only helpful for IDEs..so that the IDE will show the header files in its sources list, correct?. In theory, cmake does not actually need header files explicitly specified for dependency tracking, although I guess listing them makes it explicit.

(2) setting the PUBLIC_HEADER property for a target then makes header files available for installation via the PUBLIC_HEADER destination. Is this the preferred way to install the library interface/public headers? How do you handle a header directory hierarchy — for example maybe you have detail and impl subdirectories if you are following boost/stdlib conventions.

I found Craig’s article about target_sources very helpful (https://crascit.com/2016/01/31/enhanced-source-file-handling-with-target_sources/), but I don’t think it addresses the PUBLIC_HEADER installation use case.

Thanks,
Mike Ellery


More information about the CMake mailing list