[CMake] Interface source paths evaluated relative to dependent library

Rich T rsjtaylor.github at gmail.com
Mon Jun 25 10:22:59 EDT 2018


Hi everyone, I've a question about interface sources.

If you create an interface target A, add some sources via

add_library(A INTERFACE)
target_sources(A INTERFACE some/relative/path)

then link to another library B:

add_library(B)
target_link_libraries(B PRIVATE A)

B will search for those sources relative to its own source directory, not
the directory where A is defined. This means B fails to configure with a
missing sources error if the targets are in different directories.

If I specify the paths absolutely, B successfully finds the sources.
However, A can no longer be exported and neither can the static variant of
B by association.

I tried using $<TARGET_PROPERTY:A,SOURCE_DIR> in front of the relative
path, however it turns out SOURCE_DIR isn't a whitelisted property for
INTERFACE libraries.

Is this behavior intentional, and if so, is there any workaround? (other
than defining all targets with interface sources in the same directory as
the targets that use them)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20180625/9e1037d6/attachment.html>


More information about the CMake mailing list