Source is not rebuild when header changes

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Source is not rebuild when header changes

Florian Lindner
Hello,

on my project, which I'm currently testing with cmake, I just noticed, that when I modify a header, the project is not
rebuilt.

The CMakeLists.txt in the root dir is here: https://pastebin.com/vfReTM1N

The other CMakeLists.txt resides in root/src and lists all the source (*.cpp) files using GLOBS and adds them to the
parent scope:

set (sourcesAllNoMain ${sourcesAllNoMain} PARENT_SCOPE)
set (sourcesTests ${sourcesTests} PARENT_SCOPE)
set (sourcesTarchTests ${sourcesTarchTests} PARENT_SCOPE)


the questionable header file was not added recently, so I don't think its related to the GLOBs.

The header file is also not listed in depends.make file.

What other information can I give?

Thanks,
Florian
--

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 | Threaded
Open this post in threaded view
|

Re: Source is not rebuild when header changes

CMake mailing list
What source files include the header?
Is one of them listed as a file in your project?
Does the **including** file exist at CMake configure time, or is it
generated later by a build step?
What do the lines of code that include the header look like?

CMake uses its own analysis of the source files to determine the
depends information, since it needs to generate it without invoking
the compiler. This leads to a less-than-100% rate of correctness in
the depends information, although usually, it is misses "in the other
direction" due to depending on a header file which is included in some
conditionally compiled block. (So the typical problem is an extra
dependency, not a missing one...)

Perhaps passing along the includers and the exact lines and context of
being included will give us a hint about why the dependency is not
generated properly in your case.


HTH,
David C.




On Tue, Aug 1, 2017 at 5:18 AM, Florian Lindner <[hidden email]> wrote:

> Hello,
>
> on my project, which I'm currently testing with cmake, I just noticed, that when I modify a header, the project is not
> rebuilt.
>
> The CMakeLists.txt in the root dir is here: https://pastebin.com/vfReTM1N
>
> The other CMakeLists.txt resides in root/src and lists all the source (*.cpp) files using GLOBS and adds them to the
> parent scope:
>
> set (sourcesAllNoMain ${sourcesAllNoMain} PARENT_SCOPE)
> set (sourcesTests ${sourcesTests} PARENT_SCOPE)
> set (sourcesTarchTests ${sourcesTarchTests} PARENT_SCOPE)
>
>
> the questionable header file was not added recently, so I don't think its related to the GLOBs.
>
> The header file is also not listed in depends.make file.
>
> What other information can I give?
>
> Thanks,
> Florian
> --
>
> 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
--

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 | Threaded
Open this post in threaded view
|

Re: Source is not rebuild when header changes

Florian Lindner
Hi,

Am 01.08.2017 um 18:32 schrieb David Cole via CMake:
> What source files include the header?

It's included by src/mapping/config/MappingConfiguration.cpp

https://github.com/precice/precice/blob/develop/src/mapping/config/MappingConfiguration.cpp

https://github.com/precice/precice/blob/develop/src/mapping/PetRadialBasisFctMapping.hpp

> Is one of them listed as a file in your project?

Yes, it's also in the CMakeFiles:

% ll build/cmake-debug/CMakeFiles/precice.dir/src/mapping/config/MappingConfiguration.cpp.o

-rw-r--r-- 1 florian florian 1517472  1. Aug 15:08
build/cmake-debug/CMakeFiles/precice.dir/src/mapping/config/MappingConfiguration.cpp.o

> Does the **including** file exist at CMake configure time, or is it
> generated later by a build step?

No, it's a standard plain file.

> What do the lines of code that include the header look like?

#include "mapping/PetRadialBasisFctMapping.hpp"

>
> CMake uses its own analysis of the source files to determine the
> depends information, since it needs to generate it without invoking
> the compiler. This leads to a less-than-100% rate of correctness in
> the depends information, although usually, it is misses "in the other
> direction" due to depending on a header file which is included in some
> conditionally compiled block. (So the typical problem is an extra
> dependency, not a missing one...)

The header file is (not the including file or the #include itself) is guarded by a define

#ifndef PRECICE_NO_PETSC

which is not set. The build also contains the functionality which is guarded thereof.

> Perhaps passing along the includers and the exact lines and context of
> being included will give us a hint about why the dependency is not
> generated properly in your case.

I'm happy to provide whatever information I can.

If you want to download the entire source of the project, tell me. Right now the CMake files are not yet in the
repository, but I can create a branch and add them there.

My CMake version is 3.8.2.

Best,
Florian


>
>
>
> On Tue, Aug 1, 2017 at 5:18 AM, Florian Lindner <[hidden email]> wrote:
>> Hello,
>>
>> on my project, which I'm currently testing with cmake, I just noticed, that when I modify a header, the project is not
>> rebuilt.
>>
>> The CMakeLists.txt in the root dir is here: https://pastebin.com/vfReTM1N
>>
>> The other CMakeLists.txt resides in root/src and lists all the source (*.cpp) files using GLOBS and adds them to the
>> parent scope:
>>
>> set (sourcesAllNoMain ${sourcesAllNoMain} PARENT_SCOPE)
>> set (sourcesTests ${sourcesTests} PARENT_SCOPE)
>> set (sourcesTarchTests ${sourcesTarchTests} PARENT_SCOPE)
>>
>>
>> the questionable header file was not added recently, so I don't think its related to the GLOBs.
>>
>> The header file is also not listed in depends.make file.
>>
>> What other information can I give?
>>
>> Thanks,
>> Florian
>> --
>>
>> 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
--

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 | Threaded
Open this post in threaded view
|

Re: Source is not rebuild when header changes

CMake mailing list
And in your file "src/CMakeLists.txt" do you add
"${CMAKE_CURRENT_SOURCE_DIR}" (or anything else which resolves to the
"src" directory) to your include directories?

The line which includes the header is
    #include "mapping/..."
but there is no local subdirectory "mapping" relative to that file
(which is down in the mapping/config dir)




On Tue, Aug 1, 2017 at 6:47 AM, Florian Lindner <[hidden email]> wrote:

> Hi,
>
> Am 01.08.2017 um 18:32 schrieb David Cole via CMake:
>> What source files include the header?
>
> It's included by src/mapping/config/MappingConfiguration.cpp
>
> https://github.com/precice/precice/blob/develop/src/mapping/config/MappingConfiguration.cpp
>
> https://github.com/precice/precice/blob/develop/src/mapping/PetRadialBasisFctMapping.hpp
>
>> Is one of them listed as a file in your project?
>
> Yes, it's also in the CMakeFiles:
>
> % ll build/cmake-debug/CMakeFiles/precice.dir/src/mapping/config/MappingConfiguration.cpp.o
>
> -rw-r--r-- 1 florian florian 1517472  1. Aug 15:08
> build/cmake-debug/CMakeFiles/precice.dir/src/mapping/config/MappingConfiguration.cpp.o
>
>> Does the **including** file exist at CMake configure time, or is it
>> generated later by a build step?
>
> No, it's a standard plain file.
>
>> What do the lines of code that include the header look like?
>
> #include "mapping/PetRadialBasisFctMapping.hpp"
>
>>
>> CMake uses its own analysis of the source files to determine the
>> depends information, since it needs to generate it without invoking
>> the compiler. This leads to a less-than-100% rate of correctness in
>> the depends information, although usually, it is misses "in the other
>> direction" due to depending on a header file which is included in some
>> conditionally compiled block. (So the typical problem is an extra
>> dependency, not a missing one...)
>
> The header file is (not the including file or the #include itself) is guarded by a define
>
> #ifndef PRECICE_NO_PETSC
>
> which is not set. The build also contains the functionality which is guarded thereof.
>
>> Perhaps passing along the includers and the exact lines and context of
>> being included will give us a hint about why the dependency is not
>> generated properly in your case.
>
> I'm happy to provide whatever information I can.
>
> If you want to download the entire source of the project, tell me. Right now the CMake files are not yet in the
> repository, but I can create a branch and add them there.
>
> My CMake version is 3.8.2.
>
> Best,
> Florian
>
>
>>
>>
>>
>> On Tue, Aug 1, 2017 at 5:18 AM, Florian Lindner <[hidden email]> wrote:
>>> Hello,
>>>
>>> on my project, which I'm currently testing with cmake, I just noticed, that when I modify a header, the project is not
>>> rebuilt.
>>>
>>> The CMakeLists.txt in the root dir is here: https://pastebin.com/vfReTM1N
>>>
>>> The other CMakeLists.txt resides in root/src and lists all the source (*.cpp) files using GLOBS and adds them to the
>>> parent scope:
>>>
>>> set (sourcesAllNoMain ${sourcesAllNoMain} PARENT_SCOPE)
>>> set (sourcesTests ${sourcesTests} PARENT_SCOPE)
>>> set (sourcesTarchTests ${sourcesTarchTests} PARENT_SCOPE)
>>>
>>>
>>> the questionable header file was not added recently, so I don't think its related to the GLOBs.
>>>
>>> The header file is also not listed in depends.make file.
>>>
>>> What other information can I give?
>>>
>>> Thanks,
>>> Florian
>>> --
>>>
>>> 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
--

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 | Threaded
Open this post in threaded view
|

Re: Source is not rebuild when header changes

Florian Lindner
Am 01.08.2017 um 21:18 schrieb David Cole:
> And in your file "src/CMakeLists.txt" do you add
> "${CMAKE_CURRENT_SOURCE_DIR}" (or anything else which resolves to the
> "src" directory) to your include directories?

No, there is none. I do not added one, since it built correctly.

I have no added include_directories(${CMAKE_CURRENT_SOURCE_DIR}), but it still does not get changes to the header.

The complete src/CMakeLists.txt: https://pastebin.com/tnQPF2Gj
Again, ./CMakeLists.txt: https://pastebin.com/vfReTM1N


% grep PetRadial CMakeFiles/precice.dir/*
CMakeFiles/precice.dir/CXX.includecache:mapping/PetRadialBasisFctMapping.hpp
CMakeFiles/precice.dir/CXX.includecache:/home/florian/precice/src/mapping/config/mapping/PetRadialBasisFctMapping.hpp

>
> The line which includes the header is
>     #include "mapping/..."
> but there is no local subdirectory "mapping" relative to that file
> (which is down in the mapping/config dir)

Yes, the include is relative to ./src.

Best Thanks,
Florian

>
>
>
>
> On Tue, Aug 1, 2017 at 6:47 AM, Florian Lindner <[hidden email]> wrote:
>> Hi,
>>
>> Am 01.08.2017 um 18:32 schrieb David Cole via CMake:
>>> What source files include the header?
>>
>> It's included by src/mapping/config/MappingConfiguration.cpp
>>
>> https://github.com/precice/precice/blob/develop/src/mapping/config/MappingConfiguration.cpp
>>
>> https://github.com/precice/precice/blob/develop/src/mapping/PetRadialBasisFctMapping.hpp
>>
>>> Is one of them listed as a file in your project?
>>
>> Yes, it's also in the CMakeFiles:
>>
>> % ll build/cmake-debug/CMakeFiles/precice.dir/src/mapping/config/MappingConfiguration.cpp.o
>>
>> -rw-r--r-- 1 florian florian 1517472  1. Aug 15:08
>> build/cmake-debug/CMakeFiles/precice.dir/src/mapping/config/MappingConfiguration.cpp.o
>>
>>> Does the **including** file exist at CMake configure time, or is it
>>> generated later by a build step?
>>
>> No, it's a standard plain file.
>>
>>> What do the lines of code that include the header look like?
>>
>> #include "mapping/PetRadialBasisFctMapping.hpp"
>>
>>>
>>> CMake uses its own analysis of the source files to determine the
>>> depends information, since it needs to generate it without invoking
>>> the compiler. This leads to a less-than-100% rate of correctness in
>>> the depends information, although usually, it is misses "in the other
>>> direction" due to depending on a header file which is included in some
>>> conditionally compiled block. (So the typical problem is an extra
>>> dependency, not a missing one...)
>>
>> The header file is (not the including file or the #include itself) is guarded by a define
>>
>> #ifndef PRECICE_NO_PETSC
>>
>> which is not set. The build also contains the functionality which is guarded thereof.
>>
>>> Perhaps passing along the includers and the exact lines and context of
>>> being included will give us a hint about why the dependency is not
>>> generated properly in your case.
>>
>> I'm happy to provide whatever information I can.
>>
>> If you want to download the entire source of the project, tell me. Right now the CMake files are not yet in the
>> repository, but I can create a branch and add them there.
>>
>> My CMake version is 3.8.2.
>>
>> Best,
>> Florian
>>
>>
>>>
>>>
>>>
>>> On Tue, Aug 1, 2017 at 5:18 AM, Florian Lindner <[hidden email]> wrote:
>>>> Hello,
>>>>
>>>> on my project, which I'm currently testing with cmake, I just noticed, that when I modify a header, the project is not
>>>> rebuilt.
>>>>
>>>> The CMakeLists.txt in the root dir is here: https://pastebin.com/vfReTM1N
>>>>
>>>> The other CMakeLists.txt resides in root/src and lists all the source (*.cpp) files using GLOBS and adds them to the
>>>> parent scope:
>>>>
>>>> set (sourcesAllNoMain ${sourcesAllNoMain} PARENT_SCOPE)
>>>> set (sourcesTests ${sourcesTests} PARENT_SCOPE)
>>>> set (sourcesTarchTests ${sourcesTarchTests} PARENT_SCOPE)
>>>>
>>>>
>>>> the questionable header file was not added recently, so I don't think its related to the GLOBs.
>>>>
>>>> The header file is also not listed in depends.make file.
>>>>
>>>> What other information can I give?
>>>>
>>>> Thanks,
>>>> Florian
>>>> --
>>>>
>>>> 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
--

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