2017-12-09 1:37 GMT+01:00 Oleksii Vilchanskyi <oleksii.vilchans...@gmail.com
>:

> Hello Eric,
>
> > Why should I do that?
> > Is this the expected behavior / way to create header only library?
>
> Yes, this is the expected behaviour. CMake interprets a relative path to
> the file according to the target's add_library() or add_executable()
> call directory. I will provide a minimal, reproducible example:
>

Hi Oleksii,

Thanks you for the minimal reproducible example.
I'm bot that sure that this is the "expected" behavior


> Listfile under `lib`:
>
> > add_library(lib INTERFACE)
> > target_include_directories(lib INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")
> > target_sources(lib INTERFACE "lib.h")
>

With the previous one would expect that any target linking to this
interface target
will be provided with the include directories provided in its interface.
In your case (and in mine too) this is given with **full path**


>
> Listfile under `main`:
>
> > add_executable(main "main.c")
> > target_link_libraries(main PRIVATE lib)
>
> Now, let's look at the diagnostics:
>
> > CMake Error at main/CMakeLists.txt:1 (add_executable):
> >   Cannot find source file:
> >
> >     lib.h
>
> So, the problem occurs when CMake cannot find `lib.h` relatively to
> `add_executable(main "main.c")` call. Whether it's the expected
> behaviour is debatable (I personally would prefer CMake to search
> relatively to `add_library(lib INTERFACE)`), and the documentation is
> silent on this caveat either, so there's that.
>

Yes precisely. This seems to work OK for imported targets but not for
header-only in-project lib.


>
> One way to solve this is to provide a path to `lib.h` relatively to
> `main` directory, another way is to provide a full path.
>

We (you and me) already provide
 target_include_directories
with full path.

I cannot provide the file themselves with relative path since they may be
used
from different place.

I guess I will open an issue unless someone explain me the rational behind
that behavior.


-- 
Eric
-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake

Reply via email to