Hi Craig,
thanks for the clarification.

Best,
Michele


On Mon, Apr 15, 2019 at 2:09 AM Craig Scott <craig.sc...@crascit.com> wrote:

>
>
> On Wed, Apr 3, 2019 at 11:10 AM Michele Rosso <mro...@lbl.gov> wrote:
>
>> Hello,
>> according to the doc for CMake 3.14, target_sources() interprets relative
>> source file paths as being relative to the current source directory, i.e.
>> it should
>> prepend CMAKE_CURRENT_SOURCE_DIR to the relative paths given by the user.
>> However, this is not the case if the target and the sources are defined in
>> the same directory.
>>
>
> The docs say that target_sources() will *interpret* relative source file
> paths that way, but they do not state that it will prepend
> CMAKE_CURRENT_SOURCE_DIR. The docs for target_sources() only talk about how
> relative paths are interpreted. The docs for policy CMP0076 are a bit more
> explicit, but even they only say that target_sources() will convert the
> relative path to absolute *if the conditions also specified in those
> policy docs are met*. In the case where target_sources() is called in the
> same directory as where the target is defined, the target's SOURCE_DIR
> property and the CMAKE_CURRENT_SOURCE_DIR variable will hold the same
> value, so the relative path is not modified, as per the CMP0076 docs.
>
>
>
>> I attached a simple example to reproduce the issue. The structure of the
>> example is as follows:
>>
>> - cmake-bug/
>>      - CMakeLists.txt
>>      - main.cpp
>>      - foo/
>>         - CMakeLists.txt
>>         - foo.H
>>         - foo.cpp
>>      - bar/
>>         - CMakeLists.txt
>>         - bar.H
>>         - bar.cpp
>>
>> Target "main.exe" is defined in the top-level CMakeLists.txt, while its
>> headers and sources are located in the the top-level directory
>> and in the sub-directories 'foo' and 'bar'.
>> After target_sources is used to include all the headers and sources, I
>> retrieve the "SOURCES" property for  `main.exe`: all the sources and headers
>> but  `main.cpp` are given the correct (absolute) path.
>>
>> Is this the intended behavior? If so, why should a source file located in
>> the same directory where the target is defined be treated any differently?
>>
>
> Yes, this is the intended behavior. There's no need to modify the path
> when target_sources() is called in the same directory as that in which the
> target is defined because the behavior is unambiguous and is the same
> whether CMP0076 is set to OLD or NEW. This is consistent with what you'd
> get if you had listed the sources directly in the add_executable() or
> add_library() call instead.
>
>
> --
> Craig Scott
> Melbourne, Australia
> https://crascit.com
>
> Get the hand-book for every CMake user: Professional CMake: A Practical
> Guide <https://crascit.com/professional-cmake/>
>
-- 

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:
https://cmake.org/mailman/listinfo/cmake

Reply via email to