getting compiler's include paths

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

getting compiler's include paths

jl forums
Hi,
I want to create a full tag file and for this require to know the compiler full include path...  there is a way to had custom includes path but didn't found any variables for the include path....
for example :
$ gcc-8 -v -x c -E /dev/null
Using built-in specs.
[....]
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-linux-gnu/8/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/8/include-fixed
 /usr/x86_64-linux-gnu/include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
[...]

$ gcc -v -x c -E /dev/null
Using built-in specs.
[...]
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-linux-gnu/7/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/7/include-fixed
 /usr/x86_64-linux-gnu/include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
[...]

I tried to 


get_target_property(moggle_interface_includes FileSync INTERFACE_INCLUDE_DIRECTORIES)
message("Moggle interface includes: ${moggle_interface_includes}")

get_target_property(motor_includes FileSync INCLUDE_DIRECTORIES)
message("MOTOR includes ${motor_includes}")

but I get
Moggle interface includes: moggle_interface_includes-NOTFOUND
MOTOR includes motor_includes-NOTFOUND

there is also some issue because cmake strip dependencies from system's include, which means that updating a system software won't cause rebuild and consider that the build is uptodate, causing unexpected results
seems that there is ways to workaround this :  https://stackoverflow.com/questions/7461000/handling-header-files-dependencies-with-cmake but this is ugly... would be better to let the user choose with an option

thanks and regards
JLM

--

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

Re: getting compiler's include paths

Robert Maynard
It look that starting with CMake 3.6 modification of system headers
will cause CMake to recompile projects. What version of CMake and your
compiler are you using?

On Mon, Jun 17, 2019 at 9:40 AM jl forums <[hidden email]> wrote:

>
> Hi,
> I want to create a full tag file and for this require to know the compiler full include path...  there is a way to had custom includes path but didn't found any variables for the include path....
> for example :
> $ gcc-8 -v -x c -E /dev/null
> Using built-in specs.
> [....]
> ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
> #include "..." search starts here:
> #include <...> search starts here:
>  /usr/lib/gcc/x86_64-linux-gnu/8/include
>  /usr/local/include
>  /usr/lib/gcc/x86_64-linux-gnu/8/include-fixed
>  /usr/x86_64-linux-gnu/include
>  /usr/include/x86_64-linux-gnu
>  /usr/include
> End of search list.
> [...]
>
> $ gcc -v -x c -E /dev/null
> Using built-in specs.
> [...]
> ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
> #include "..." search starts here:
> #include <...> search starts here:
>  /usr/lib/gcc/x86_64-linux-gnu/7/include
>  /usr/local/include
>  /usr/lib/gcc/x86_64-linux-gnu/7/include-fixed
>  /usr/x86_64-linux-gnu/include
>  /usr/include/x86_64-linux-gnu
>  /usr/include
> End of search list.
> [...]
>
> I tried to
>
>
> get_target_property(moggle_interface_includes FileSync INTERFACE_INCLUDE_DIRECTORIES)
> message("Moggle interface includes: ${moggle_interface_includes}")
>
> get_target_property(motor_includes FileSync INCLUDE_DIRECTORIES)
> message("MOTOR includes ${motor_includes}")
>
> but I get
>
> Moggle interface includes: moggle_interface_includes-NOTFOUND
> MOTOR includes motor_includes-NOTFOUND
>
>
> there is also some issue because cmake strip dependencies from system's include, which means that updating a system software won't cause rebuild and consider that the build is uptodate, causing unexpected results
> seems that there is ways to workaround this :  https://stackoverflow.com/questions/7461000/handling-header-files-dependencies-with-cmake but this is ugly... would be better to let the user choose with an option
>
> thanks and regards
> JLM
> --
>
> 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
--

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

Re: getting compiler's include paths

jl forums
thanks for the anwer....
quite not... I'm using cmake 3.14.2 (so, far away from 3.6....) and have a look, in main.cpp, there is #include <filesystem>:

$ find /usr/include/ -name filesystem
/usr/include/c++/5/experimental/filesystem
/usr/include/c++/7/experimental/filesystem
/usr/include/c++/8/filesystem
/usr/include/c++/8/experimental/filesystem
$ sudo touch /usr/include/c++/5/experimental/filesystem /usr/include/c++/7/experimental/filesystem /usr/include/c++/8/filesystem /usr/include/c++/8/experimental/filesystem
$ make
[100%] Built target FileSync
$ touch ../main.cxx
$ make
Scanning dependencies of target FileSync
[ 50%] Building CXX object CMakeFiles/FileSync.dir/main.cxx.o
[100%] Linking CXX executable FileSync
[100%] Built target FileSync

=> cmake don't create "full include dependency" which IS a mistake.... updating system g++ can just assume the target is uptodate and in fact just create a broken build...

in cmake cxx.includecache

#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">])
#IncludeRegexScan: ^.*$
#IncludeRegexComplain: ^$
#IncludeRegexTransform: 
/home/orange/crypt/Devel/projets/FileSync/main.cxx
cstdio
-
io.h
-
fcntl.h
-
locale
-
clocale
-
fstream
-
iostream
-
filesystem
-

$ /usr/bin/gcc-8 -M ../main.cxx
main.o: ../main.cxx /usr/x86_64-linux-gnu/include/stdc-predef.h \
 /usr/include/c++/8/cstdio \
 /usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h \
 /usr/include/x86_64-linux-gnu/c++/8/bits/os_defines.h \
 /usr/x86_64-linux-gnu/include/features.h \
 /usr/x86_64-linux-gnu/include/sys/cdefs.h \
 /usr/x86_64-linux-gnu/include/bits/wordsize.h \
 /usr/x86_64-linux-gnu/include/bits/long-double.h \
 /usr/x86_64-linux-gnu/include/gnu/stubs.h \
 /usr/x86_64-linux-gnu/include/gnu/stubs-64.h \
 /usr/include/x86_64-linux-gnu/c++/8/bits/cpu_defines.h \
 /usr/x86_64-linux-gnu/include/stdio.h \
 /usr/x86_64-linux-gnu/include/bits/libc-header-start.h \
 /usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h \
 /usr/x86_64-linux-gnu/include/bits/types.h \
 /usr/x86_64-linux-gnu/include/bits/typesizes.h \
 /usr/x86_64-linux-gnu/include/bits/types/__FILE.h \
 /usr/x86_64-linux-gnu/include/bits/types/FILE.h \
 /usr/x86_64-linux-gnu/include/bits/libio.h \
 /usr/x86_64-linux-gnu/include/bits/_G_config.h \
 /usr/x86_64-linux-gnu/include/bits/types/__mbstate_t.h \
 /usr/lib/gcc/x86_64-linux-gnu/8/include/stdarg.h \
 /usr/x86_64-linux-gnu/include/bits/stdio_lim.h \
 /usr/x86_64-linux-gnu/include/bits/sys_errlist.h \
 /usr/include/c++/8/locale /usr/include/c++/8/bits/localefwd.h \
 /usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h \
 /usr/include/c++/8/clocale /usr/x86_64-linux-gnu/include/locale.h \
 /usr/x86_64-linux-gnu/include/bits/locale.h \
 /usr/x86_64-linux-gnu/include/bits/types/locale_t.h \
 /usr/x86_64-linux-gnu/include/bits/types/__locale_t.h \
 /usr/include/c++/8/iosfwd /usr/include/c++/8/bits/stringfwd.h \
 /usr/include/c++/8/bits/memoryfwd.h /usr/include/c++/8/bits/postypes.h \
 /usr/include/c++/8/cwchar /usr/x86_64-linux-gnu/include/wchar.h \
 /usr/x86_64-linux-gnu/include/bits/floatn.h \
 /usr/x86_64-linux-gnu/include/bits/floatn-common.h \
 /usr/x86_64-linux-gnu/include/bits/wchar.h \
 /usr/x86_64-linux-gnu/include/bits/types/wint_t.h \
 /usr/x86_64-linux-gnu/include/bits/types/mbstate_t.h \
 /usr/include/c++/8/cctype /usr/x86_64-linux-gnu/include/ctype.h \
 /usr/x86_64-linux-gnu/include/endian.h \
 /usr/x86_64-linux-gnu/include/bits/endian.h \
 /usr/x86_64-linux-gnu/include/bits/byteswap.h \
 /usr/x86_64-linux-gnu/include/bits/byteswap-16.h \
 /usr/x86_64-linux-gnu/include/bits/uintn-identity.h \
 /usr/include/c++/8/bits/locale_classes.h /usr/include/c++/8/string \
 /usr/include/c++/8/bits/char_traits.h \
 /usr/include/c++/8/bits/stl_algobase.h \
 /usr/include/c++/8/bits/functexcept.h \
 /usr/include/c++/8/bits/exception_defines.h \
 /usr/include/c++/8/bits/cpp_type_traits.h \
 /usr/include/c++/8/ext/type_traits.h \
 /usr/include/c++/8/ext/numeric_traits.h \
 /usr/include/c++/8/bits/stl_pair.h /usr/include/c++/8/bits/move.h \
 /usr/include/c++/8/bits/concept_check.h /usr/include/c++/8/type_traits \
 /usr/include/c++/8/bits/stl_iterator_base_types.h \
 /usr/include/c++/8/bits/stl_iterator_base_funcs.h \
 /usr/include/c++/8/debug/assertions.h \
 /usr/include/c++/8/bits/stl_iterator.h \
 /usr/include/c++/8/bits/ptr_traits.h /usr/include/c++/8/debug/debug.h \
 /usr/include/c++/8/bits/predefined_ops.h /usr/include/c++/8/cstdint \
 /usr/lib/gcc/x86_64-linux-gnu/8/include/stdint.h \
 /usr/x86_64-linux-gnu/include/stdint.h \
 /usr/x86_64-linux-gnu/include/bits/stdint-intn.h \
 /usr/x86_64-linux-gnu/include/bits/stdint-uintn.h \
 /usr/include/c++/8/bits/allocator.h \
 /usr/include/x86_64-linux-gnu/c++/8/bits/c++allocator.h \
 /usr/include/c++/8/ext/new_allocator.h /usr/include/c++/8/new \
 /usr/include/c++/8/exception /usr/include/c++/8/bits/exception.h \
 /usr/include/c++/8/bits/exception_ptr.h \
 /usr/include/c++/8/bits/cxxabi_init_exception.h \
 /usr/include/c++/8/typeinfo /usr/include/c++/8/bits/hash_bytes.h \
 /usr/include/c++/8/bits/nested_exception.h \
 /usr/include/c++/8/bits/ostream_insert.h \
 /usr/include/c++/8/bits/cxxabi_forced.h \
 /usr/include/c++/8/bits/stl_function.h \
 /usr/include/c++/8/backward/binders.h \
 /usr/include/c++/8/bits/range_access.h \
 /usr/include/c++/8/initializer_list \
 /usr/include/c++/8/bits/basic_string.h \
 /usr/include/c++/8/ext/atomicity.h \
 /usr/include/x86_64-linux-gnu/c++/8/bits/gthr.h \
 /usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h \
 /usr/x86_64-linux-gnu/include/pthread.h \
 /usr/x86_64-linux-gnu/include/sched.h \
 /usr/x86_64-linux-gnu/include/bits/types/time_t.h \
 /usr/x86_64-linux-gnu/include/bits/types/struct_timespec.h \
 /usr/x86_64-linux-gnu/include/bits/sched.h \
 /usr/x86_64-linux-gnu/include/bits/cpu-set.h \
 /usr/x86_64-linux-gnu/include/time.h \
 /usr/x86_64-linux-gnu/include/bits/time.h \
 /usr/x86_64-linux-gnu/include/bits/timex.h \
 /usr/x86_64-linux-gnu/include/bits/types/struct_timeval.h \
 /usr/x86_64-linux-gnu/include/bits/types/clock_t.h \
 /usr/x86_64-linux-gnu/include/bits/types/struct_tm.h \
 /usr/x86_64-linux-gnu/include/bits/types/clockid_t.h \
 /usr/x86_64-linux-gnu/include/bits/types/timer_t.h \
 /usr/x86_64-linux-gnu/include/bits/types/struct_itimerspec.h \
 /usr/x86_64-linux-gnu/include/bits/pthreadtypes.h \
 /usr/x86_64-linux-gnu/include/bits/thread-shared-types.h \
 /usr/x86_64-linux-gnu/include/bits/pthreadtypes-arch.h \
 /usr/x86_64-linux-gnu/include/bits/setjmp.h \
 /usr/include/x86_64-linux-gnu/c++/8/bits/atomic_word.h \
 /usr/include/c++/8/ext/alloc_traits.h \
 /usr/include/c++/8/bits/alloc_traits.h \
 /usr/include/c++/8/ext/string_conversions.h /usr/include/c++/8/cstdlib \
 /usr/x86_64-linux-gnu/include/stdlib.h \
 /usr/x86_64-linux-gnu/include/bits/waitflags.h \
 /usr/x86_64-linux-gnu/include/bits/waitstatus.h \
 /usr/x86_64-linux-gnu/include/sys/types.h \
 /usr/x86_64-linux-gnu/include/sys/select.h \
 /usr/x86_64-linux-gnu/include/bits/select.h \
 /usr/x86_64-linux-gnu/include/bits/types/sigset_t.h \
 /usr/x86_64-linux-gnu/include/bits/types/__sigset_t.h \
 /usr/x86_64-linux-gnu/include/sys/sysmacros.h \
 /usr/x86_64-linux-gnu/include/bits/sysmacros.h \
 /usr/x86_64-linux-gnu/include/alloca.h \
 /usr/x86_64-linux-gnu/include/bits/stdlib-float.h \
 /usr/include/c++/8/bits/std_abs.h /usr/include/c++/8/cerrno \
 /usr/x86_64-linux-gnu/include/errno.h \
 /usr/x86_64-linux-gnu/include/bits/errno.h \
 /usr/x86_64-linux-gnu/include/linux/errno.h \
 /usr/x86_64-linux-gnu/include/asm/errno.h \
 /usr/x86_64-linux-gnu/include/asm-generic/errno.h \
 /usr/x86_64-linux-gnu/include/asm-generic/errno-base.h \
 /usr/include/c++/8/bits/functional_hash.h \
 /usr/include/c++/8/bits/basic_string.tcc \
 /usr/include/c++/8/bits/locale_classes.tcc \
 /usr/include/c++/8/bits/locale_facets.h /usr/include/c++/8/cwctype \
 /usr/x86_64-linux-gnu/include/wctype.h \
 /usr/x86_64-linux-gnu/include/bits/wctype-wchar.h \
 /usr/include/x86_64-linux-gnu/c++/8/bits/ctype_base.h \
 /usr/include/c++/8/bits/ios_base.h /usr/include/c++/8/system_error \
 /usr/include/x86_64-linux-gnu/c++/8/bits/error_constants.h \
 /usr/include/c++/8/stdexcept /usr/include/c++/8/streambuf \
 /usr/include/c++/8/bits/streambuf.tcc \
 /usr/include/c++/8/bits/streambuf_iterator.h \
 /usr/include/x86_64-linux-gnu/c++/8/bits/ctype_inline.h \
 /usr/include/c++/8/bits/locale_facets.tcc \
 /usr/include/c++/8/bits/locale_facets_nonio.h /usr/include/c++/8/ctime \
 /usr/include/x86_64-linux-gnu/c++/8/bits/time_members.h \
 /usr/include/x86_64-linux-gnu/c++/8/bits/messages_members.h \
 /usr/x86_64-linux-gnu/include/libintl.h \
 /usr/include/c++/8/bits/codecvt.h \
 /usr/include/c++/8/bits/locale_facets_nonio.tcc \
 /usr/include/c++/8/bits/locale_conv.h \
 /usr/include/c++/8/bits/unique_ptr.h /usr/include/c++/8/utility \
 /usr/include/c++/8/bits/stl_relops.h /usr/include/c++/8/tuple \
 /usr/include/c++/8/array /usr/include/c++/8/bits/uses_allocator.h \
 /usr/include/c++/8/bits/invoke.h /usr/include/c++/8/fstream \
 /usr/include/c++/8/istream /usr/include/c++/8/ios \
 /usr/include/c++/8/bits/basic_ios.h \
 /usr/include/c++/8/bits/basic_ios.tcc /usr/include/c++/8/ostream \
 /usr/include/c++/8/bits/ostream.tcc /usr/include/c++/8/bits/istream.tcc \
 /usr/include/x86_64-linux-gnu/c++/8/bits/basic_file.h \
 /usr/include/x86_64-linux-gnu/c++/8/bits/c++io.h \
 /usr/include/c++/8/bits/fstream.tcc /usr/include/c++/8/iostream \
 /usr/include/c++/8/filesystem


amazing, no? cmake find only 9 dependencies against 100+ real ones (and I don't even speak of errors that can be caused in parsing if some -D option is changed.... 

thanks and regards
JLM
 

Le lun. 24 juin 2019 à 14:14, Robert Maynard <[hidden email]> a écrit :
It look that starting with CMake 3.6 modification of system headers
will cause CMake to recompile projects. What version of CMake and your
compiler are you using?

On Mon, Jun 17, 2019 at 9:40 AM jl forums <[hidden email]> wrote:
>
> Hi,
> I want to create a full tag file and for this require to know the compiler full include path...  there is a way to had custom includes path but didn't found any variables for the include path....
> for example :
> $ gcc-8 -v -x c -E /dev/null
> Using built-in specs.
> [....]
> ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
> #include "..." search starts here:
> #include <...> search starts here:
>  /usr/lib/gcc/x86_64-linux-gnu/8/include
>  /usr/local/include
>  /usr/lib/gcc/x86_64-linux-gnu/8/include-fixed
>  /usr/x86_64-linux-gnu/include
>  /usr/include/x86_64-linux-gnu
>  /usr/include
> End of search list.
> [...]
>
> $ gcc -v -x c -E /dev/null
> Using built-in specs.
> [...]
> ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
> #include "..." search starts here:
> #include <...> search starts here:
>  /usr/lib/gcc/x86_64-linux-gnu/7/include
>  /usr/local/include
>  /usr/lib/gcc/x86_64-linux-gnu/7/include-fixed
>  /usr/x86_64-linux-gnu/include
>  /usr/include/x86_64-linux-gnu
>  /usr/include
> End of search list.
> [...]
>
> I tried to
>
>
> get_target_property(moggle_interface_includes FileSync INTERFACE_INCLUDE_DIRECTORIES)
> message("Moggle interface includes: ${moggle_interface_includes}")
>
> get_target_property(motor_includes FileSync INCLUDE_DIRECTORIES)
> message("MOTOR includes ${motor_includes}")
>
> but I get
>
> Moggle interface includes: moggle_interface_includes-NOTFOUND
> MOTOR includes motor_includes-NOTFOUND
>
>
> there is also some issue because cmake strip dependencies from system's include, which means that updating a system software won't cause rebuild and consider that the build is uptodate, causing unexpected results
> seems that there is ways to workaround this :  https://stackoverflow.com/questions/7461000/handling-header-files-dependencies-with-cmake but this is ugly... would be better to let the user choose with an option
>
> thanks and regards
> JLM
> --
>
> 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

--

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

Re: getting compiler's include paths

Robert Maynard
I completely forgot that the Makefiles based generators in CMake have
a separate heuristic for determining system headers.

If you use the Ninja generator I see the expected behavior:
~/W/t/nbuild $ sudo touch /usr/include/c++/7/array
~/W/t/nbuild $ ninja -d explain -v
ninja explain: output test/CMakeFiles/ProjTest.dir/test.cpp.o older
than most recent input /usr/include/c++/7/array (1562165327 vs
1562165329)
ninja explain: test/CMakeFiles/ProjTest.dir/test.cpp.o is dirty
ninja explain: test/ProjTest is dirty
[1/2] /usr/bin/c++   -I../my_lib/include -std=gnu++1z -MD -MT
test/CMakeFiles/ProjTest.dir/test.cpp.o -MF
test/CMakeFiles/ProjTest.dir/test.cpp.o.d -o
test/CMakeFiles/ProjTest.dir/test.cpp.o -c ../test/test.cpp
[2/2] : && /usr/bin/c++     test/CMakeFiles/ProjTest.dir/test.cpp.o
-o test/ProjTest   && :


I will need to spend some more time figuring out the extra include
caching logic for the Makefile based generators, and will report back.

On Thu, Jun 27, 2019 at 8:59 AM jl forums <[hidden email]> wrote:

>
> thanks for the anwer....
> quite not... I'm using cmake 3.14.2 (so, far away from 3.6....) and have a look, in main.cpp, there is #include <filesystem>:
>
> $ find /usr/include/ -name filesystem
> /usr/include/c++/5/experimental/filesystem
> /usr/include/c++/7/experimental/filesystem
> /usr/include/c++/8/filesystem
> /usr/include/c++/8/experimental/filesystem
> $ sudo touch /usr/include/c++/5/experimental/filesystem /usr/include/c++/7/experimental/filesystem /usr/include/c++/8/filesystem /usr/include/c++/8/experimental/filesystem
> $ make
> [100%] Built target FileSync
> $ touch ../main.cxx
> $ make
> Scanning dependencies of target FileSync
> [ 50%] Building CXX object CMakeFiles/FileSync.dir/main.cxx.o
> [100%] Linking CXX executable FileSync
> [100%] Built target FileSync
>
>
> => cmake don't create "full include dependency" which IS a mistake.... updating system g++ can just assume the target is uptodate and in fact just create a broken build...
>
> in cmake cxx.includecache
>
> #IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">])
> #IncludeRegexScan: ^.*$
> #IncludeRegexComplain: ^$
> #IncludeRegexTransform:
> /home/orange/crypt/Devel/projets/FileSync/main.cxx
> cstdio
> -
> io.h
> -
> fcntl.h
> -
> locale
> -
> clocale
> -
> fstream
> -
> iostream
> -
> filesystem
> -
>
> $ /usr/bin/gcc-8 -M ../main.cxx
> main.o: ../main.cxx /usr/x86_64-linux-gnu/include/stdc-predef.h \
>  /usr/include/c++/8/cstdio \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/os_defines.h \
>  /usr/x86_64-linux-gnu/include/features.h \
>  /usr/x86_64-linux-gnu/include/sys/cdefs.h \
>  /usr/x86_64-linux-gnu/include/bits/wordsize.h \
>  /usr/x86_64-linux-gnu/include/bits/long-double.h \
>  /usr/x86_64-linux-gnu/include/gnu/stubs.h \
>  /usr/x86_64-linux-gnu/include/gnu/stubs-64.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/cpu_defines.h \
>  /usr/x86_64-linux-gnu/include/stdio.h \
>  /usr/x86_64-linux-gnu/include/bits/libc-header-start.h \
>  /usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h \
>  /usr/x86_64-linux-gnu/include/bits/types.h \
>  /usr/x86_64-linux-gnu/include/bits/typesizes.h \
>  /usr/x86_64-linux-gnu/include/bits/types/__FILE.h \
>  /usr/x86_64-linux-gnu/include/bits/types/FILE.h \
>  /usr/x86_64-linux-gnu/include/bits/libio.h \
>  /usr/x86_64-linux-gnu/include/bits/_G_config.h \
>  /usr/x86_64-linux-gnu/include/bits/types/__mbstate_t.h \
>  /usr/lib/gcc/x86_64-linux-gnu/8/include/stdarg.h \
>  /usr/x86_64-linux-gnu/include/bits/stdio_lim.h \
>  /usr/x86_64-linux-gnu/include/bits/sys_errlist.h \
>  /usr/include/c++/8/locale /usr/include/c++/8/bits/localefwd.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h \
>  /usr/include/c++/8/clocale /usr/x86_64-linux-gnu/include/locale.h \
>  /usr/x86_64-linux-gnu/include/bits/locale.h \
>  /usr/x86_64-linux-gnu/include/bits/types/locale_t.h \
>  /usr/x86_64-linux-gnu/include/bits/types/__locale_t.h \
>  /usr/include/c++/8/iosfwd /usr/include/c++/8/bits/stringfwd.h \
>  /usr/include/c++/8/bits/memoryfwd.h /usr/include/c++/8/bits/postypes.h \
>  /usr/include/c++/8/cwchar /usr/x86_64-linux-gnu/include/wchar.h \
>  /usr/x86_64-linux-gnu/include/bits/floatn.h \
>  /usr/x86_64-linux-gnu/include/bits/floatn-common.h \
>  /usr/x86_64-linux-gnu/include/bits/wchar.h \
>  /usr/x86_64-linux-gnu/include/bits/types/wint_t.h \
>  /usr/x86_64-linux-gnu/include/bits/types/mbstate_t.h \
>  /usr/include/c++/8/cctype /usr/x86_64-linux-gnu/include/ctype.h \
>  /usr/x86_64-linux-gnu/include/endian.h \
>  /usr/x86_64-linux-gnu/include/bits/endian.h \
>  /usr/x86_64-linux-gnu/include/bits/byteswap.h \
>  /usr/x86_64-linux-gnu/include/bits/byteswap-16.h \
>  /usr/x86_64-linux-gnu/include/bits/uintn-identity.h \
>  /usr/include/c++/8/bits/locale_classes.h /usr/include/c++/8/string \
>  /usr/include/c++/8/bits/char_traits.h \
>  /usr/include/c++/8/bits/stl_algobase.h \
>  /usr/include/c++/8/bits/functexcept.h \
>  /usr/include/c++/8/bits/exception_defines.h \
>  /usr/include/c++/8/bits/cpp_type_traits.h \
>  /usr/include/c++/8/ext/type_traits.h \
>  /usr/include/c++/8/ext/numeric_traits.h \
>  /usr/include/c++/8/bits/stl_pair.h /usr/include/c++/8/bits/move.h \
>  /usr/include/c++/8/bits/concept_check.h /usr/include/c++/8/type_traits \
>  /usr/include/c++/8/bits/stl_iterator_base_types.h \
>  /usr/include/c++/8/bits/stl_iterator_base_funcs.h \
>  /usr/include/c++/8/debug/assertions.h \
>  /usr/include/c++/8/bits/stl_iterator.h \
>  /usr/include/c++/8/bits/ptr_traits.h /usr/include/c++/8/debug/debug.h \
>  /usr/include/c++/8/bits/predefined_ops.h /usr/include/c++/8/cstdint \
>  /usr/lib/gcc/x86_64-linux-gnu/8/include/stdint.h \
>  /usr/x86_64-linux-gnu/include/stdint.h \
>  /usr/x86_64-linux-gnu/include/bits/stdint-intn.h \
>  /usr/x86_64-linux-gnu/include/bits/stdint-uintn.h \
>  /usr/include/c++/8/bits/allocator.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/c++allocator.h \
>  /usr/include/c++/8/ext/new_allocator.h /usr/include/c++/8/new \
>  /usr/include/c++/8/exception /usr/include/c++/8/bits/exception.h \
>  /usr/include/c++/8/bits/exception_ptr.h \
>  /usr/include/c++/8/bits/cxxabi_init_exception.h \
>  /usr/include/c++/8/typeinfo /usr/include/c++/8/bits/hash_bytes.h \
>  /usr/include/c++/8/bits/nested_exception.h \
>  /usr/include/c++/8/bits/ostream_insert.h \
>  /usr/include/c++/8/bits/cxxabi_forced.h \
>  /usr/include/c++/8/bits/stl_function.h \
>  /usr/include/c++/8/backward/binders.h \
>  /usr/include/c++/8/bits/range_access.h \
>  /usr/include/c++/8/initializer_list \
>  /usr/include/c++/8/bits/basic_string.h \
>  /usr/include/c++/8/ext/atomicity.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/gthr.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h \
>  /usr/x86_64-linux-gnu/include/pthread.h \
>  /usr/x86_64-linux-gnu/include/sched.h \
>  /usr/x86_64-linux-gnu/include/bits/types/time_t.h \
>  /usr/x86_64-linux-gnu/include/bits/types/struct_timespec.h \
>  /usr/x86_64-linux-gnu/include/bits/sched.h \
>  /usr/x86_64-linux-gnu/include/bits/cpu-set.h \
>  /usr/x86_64-linux-gnu/include/time.h \
>  /usr/x86_64-linux-gnu/include/bits/time.h \
>  /usr/x86_64-linux-gnu/include/bits/timex.h \
>  /usr/x86_64-linux-gnu/include/bits/types/struct_timeval.h \
>  /usr/x86_64-linux-gnu/include/bits/types/clock_t.h \
>  /usr/x86_64-linux-gnu/include/bits/types/struct_tm.h \
>  /usr/x86_64-linux-gnu/include/bits/types/clockid_t.h \
>  /usr/x86_64-linux-gnu/include/bits/types/timer_t.h \
>  /usr/x86_64-linux-gnu/include/bits/types/struct_itimerspec.h \
>  /usr/x86_64-linux-gnu/include/bits/pthreadtypes.h \
>  /usr/x86_64-linux-gnu/include/bits/thread-shared-types.h \
>  /usr/x86_64-linux-gnu/include/bits/pthreadtypes-arch.h \
>  /usr/x86_64-linux-gnu/include/bits/setjmp.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/atomic_word.h \
>  /usr/include/c++/8/ext/alloc_traits.h \
>  /usr/include/c++/8/bits/alloc_traits.h \
>  /usr/include/c++/8/ext/string_conversions.h /usr/include/c++/8/cstdlib \
>  /usr/x86_64-linux-gnu/include/stdlib.h \
>  /usr/x86_64-linux-gnu/include/bits/waitflags.h \
>  /usr/x86_64-linux-gnu/include/bits/waitstatus.h \
>  /usr/x86_64-linux-gnu/include/sys/types.h \
>  /usr/x86_64-linux-gnu/include/sys/select.h \
>  /usr/x86_64-linux-gnu/include/bits/select.h \
>  /usr/x86_64-linux-gnu/include/bits/types/sigset_t.h \
>  /usr/x86_64-linux-gnu/include/bits/types/__sigset_t.h \
>  /usr/x86_64-linux-gnu/include/sys/sysmacros.h \
>  /usr/x86_64-linux-gnu/include/bits/sysmacros.h \
>  /usr/x86_64-linux-gnu/include/alloca.h \
>  /usr/x86_64-linux-gnu/include/bits/stdlib-float.h \
>  /usr/include/c++/8/bits/std_abs.h /usr/include/c++/8/cerrno \
>  /usr/x86_64-linux-gnu/include/errno.h \
>  /usr/x86_64-linux-gnu/include/bits/errno.h \
>  /usr/x86_64-linux-gnu/include/linux/errno.h \
>  /usr/x86_64-linux-gnu/include/asm/errno.h \
>  /usr/x86_64-linux-gnu/include/asm-generic/errno.h \
>  /usr/x86_64-linux-gnu/include/asm-generic/errno-base.h \
>  /usr/include/c++/8/bits/functional_hash.h \
>  /usr/include/c++/8/bits/basic_string.tcc \
>  /usr/include/c++/8/bits/locale_classes.tcc \
>  /usr/include/c++/8/bits/locale_facets.h /usr/include/c++/8/cwctype \
>  /usr/x86_64-linux-gnu/include/wctype.h \
>  /usr/x86_64-linux-gnu/include/bits/wctype-wchar.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/ctype_base.h \
>  /usr/include/c++/8/bits/ios_base.h /usr/include/c++/8/system_error \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/error_constants.h \
>  /usr/include/c++/8/stdexcept /usr/include/c++/8/streambuf \
>  /usr/include/c++/8/bits/streambuf.tcc \
>  /usr/include/c++/8/bits/streambuf_iterator.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/ctype_inline.h \
>  /usr/include/c++/8/bits/locale_facets.tcc \
>  /usr/include/c++/8/bits/locale_facets_nonio.h /usr/include/c++/8/ctime \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/time_members.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/messages_members.h \
>  /usr/x86_64-linux-gnu/include/libintl.h \
>  /usr/include/c++/8/bits/codecvt.h \
>  /usr/include/c++/8/bits/locale_facets_nonio.tcc \
>  /usr/include/c++/8/bits/locale_conv.h \
>  /usr/include/c++/8/bits/unique_ptr.h /usr/include/c++/8/utility \
>  /usr/include/c++/8/bits/stl_relops.h /usr/include/c++/8/tuple \
>  /usr/include/c++/8/array /usr/include/c++/8/bits/uses_allocator.h \
>  /usr/include/c++/8/bits/invoke.h /usr/include/c++/8/fstream \
>  /usr/include/c++/8/istream /usr/include/c++/8/ios \
>  /usr/include/c++/8/bits/basic_ios.h \
>  /usr/include/c++/8/bits/basic_ios.tcc /usr/include/c++/8/ostream \
>  /usr/include/c++/8/bits/ostream.tcc /usr/include/c++/8/bits/istream.tcc \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/basic_file.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/c++io.h \
>  /usr/include/c++/8/bits/fstream.tcc /usr/include/c++/8/iostream \
>  /usr/include/c++/8/filesystem
>
>
> amazing, no? cmake find only 9 dependencies against 100+ real ones (and I don't even speak of errors that can be caused in parsing if some -D option is changed....
>
> thanks and regards
> JLM
>
>
> Le lun. 24 juin 2019 à 14:14, Robert Maynard <[hidden email]> a écrit :
>>
>> It look that starting with CMake 3.6 modification of system headers
>> will cause CMake to recompile projects. What version of CMake and your
>> compiler are you using?
>>
>> On Mon, Jun 17, 2019 at 9:40 AM jl forums <[hidden email]> wrote:
>> >
>> > Hi,
>> > I want to create a full tag file and for this require to know the compiler full include path...  there is a way to had custom includes path but didn't found any variables for the include path....
>> > for example :
>> > $ gcc-8 -v -x c -E /dev/null
>> > Using built-in specs.
>> > [....]
>> > ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
>> > #include "..." search starts here:
>> > #include <...> search starts here:
>> >  /usr/lib/gcc/x86_64-linux-gnu/8/include
>> >  /usr/local/include
>> >  /usr/lib/gcc/x86_64-linux-gnu/8/include-fixed
>> >  /usr/x86_64-linux-gnu/include
>> >  /usr/include/x86_64-linux-gnu
>> >  /usr/include
>> > End of search list.
>> > [...]
>> >
>> > $ gcc -v -x c -E /dev/null
>> > Using built-in specs.
>> > [...]
>> > ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
>> > #include "..." search starts here:
>> > #include <...> search starts here:
>> >  /usr/lib/gcc/x86_64-linux-gnu/7/include
>> >  /usr/local/include
>> >  /usr/lib/gcc/x86_64-linux-gnu/7/include-fixed
>> >  /usr/x86_64-linux-gnu/include
>> >  /usr/include/x86_64-linux-gnu
>> >  /usr/include
>> > End of search list.
>> > [...]
>> >
>> > I tried to
>> >
>> >
>> > get_target_property(moggle_interface_includes FileSync INTERFACE_INCLUDE_DIRECTORIES)
>> > message("Moggle interface includes: ${moggle_interface_includes}")
>> >
>> > get_target_property(motor_includes FileSync INCLUDE_DIRECTORIES)
>> > message("MOTOR includes ${motor_includes}")
>> >
>> > but I get
>> >
>> > Moggle interface includes: moggle_interface_includes-NOTFOUND
>> > MOTOR includes motor_includes-NOTFOUND
>> >
>> >
>> > there is also some issue because cmake strip dependencies from system's include, which means that updating a system software won't cause rebuild and consider that the build is uptodate, causing unexpected results
>> > seems that there is ways to workaround this :  https://stackoverflow.com/questions/7461000/handling-header-files-dependencies-with-cmake but this is ugly... would be better to let the user choose with an option
>> >
>> > thanks and regards
>> > JLM
>> > --
>> >
>> > 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
--

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

Re: getting compiler's include paths

jl forums
ok, thanks
by the way what about my ctags rule? how can i get the include path of an app? so that i can pass it to ctags and have my tags produced?
thanks and regards
jlm

Le mer. 3 juil. 2019 à 16:52, Robert Maynard <[hidden email]> a écrit :
I completely forgot that the Makefiles based generators in CMake have
a separate heuristic for determining system headers.

If you use the Ninja generator I see the expected behavior:
~/W/t/nbuild $ sudo touch /usr/include/c++/7/array
~/W/t/nbuild $ ninja -d explain -v
ninja explain: output test/CMakeFiles/ProjTest.dir/test.cpp.o older
than most recent input /usr/include/c++/7/array (1562165327 vs
1562165329)
ninja explain: test/CMakeFiles/ProjTest.dir/test.cpp.o is dirty
ninja explain: test/ProjTest is dirty
[1/2] /usr/bin/c++   -I../my_lib/include -std=gnu++1z -MD -MT
test/CMakeFiles/ProjTest.dir/test.cpp.o -MF
test/CMakeFiles/ProjTest.dir/test.cpp.o.d -o
test/CMakeFiles/ProjTest.dir/test.cpp.o -c ../test/test.cpp
[2/2] : && /usr/bin/c++     test/CMakeFiles/ProjTest.dir/test.cpp.o
-o test/ProjTest   && :


I will need to spend some more time figuring out the extra include
caching logic for the Makefile based generators, and will report back.

On Thu, Jun 27, 2019 at 8:59 AM jl forums <[hidden email]> wrote:
>
> thanks for the anwer....
> quite not... I'm using cmake 3.14.2 (so, far away from 3.6....) and have a look, in main.cpp, there is #include <filesystem>:
>
> $ find /usr/include/ -name filesystem
> /usr/include/c++/5/experimental/filesystem
> /usr/include/c++/7/experimental/filesystem
> /usr/include/c++/8/filesystem
> /usr/include/c++/8/experimental/filesystem
> $ sudo touch /usr/include/c++/5/experimental/filesystem /usr/include/c++/7/experimental/filesystem /usr/include/c++/8/filesystem /usr/include/c++/8/experimental/filesystem
> $ make
> [100%] Built target FileSync
> $ touch ../main.cxx
> $ make
> Scanning dependencies of target FileSync
> [ 50%] Building CXX object CMakeFiles/FileSync.dir/main.cxx.o
> [100%] Linking CXX executable FileSync
> [100%] Built target FileSync
>
>
> => cmake don't create "full include dependency" which IS a mistake.... updating system g++ can just assume the target is uptodate and in fact just create a broken build...
>
> in cmake cxx.includecache
>
> #IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">])
> #IncludeRegexScan: ^.*$
> #IncludeRegexComplain: ^$
> #IncludeRegexTransform:
> /home/orange/crypt/Devel/projets/FileSync/main.cxx
> cstdio
> -
> io.h
> -
> fcntl.h
> -
> locale
> -
> clocale
> -
> fstream
> -
> iostream
> -
> filesystem
> -
>
> $ /usr/bin/gcc-8 -M ../main.cxx
> main.o: ../main.cxx /usr/x86_64-linux-gnu/include/stdc-predef.h \
>  /usr/include/c++/8/cstdio \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/os_defines.h \
>  /usr/x86_64-linux-gnu/include/features.h \
>  /usr/x86_64-linux-gnu/include/sys/cdefs.h \
>  /usr/x86_64-linux-gnu/include/bits/wordsize.h \
>  /usr/x86_64-linux-gnu/include/bits/long-double.h \
>  /usr/x86_64-linux-gnu/include/gnu/stubs.h \
>  /usr/x86_64-linux-gnu/include/gnu/stubs-64.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/cpu_defines.h \
>  /usr/x86_64-linux-gnu/include/stdio.h \
>  /usr/x86_64-linux-gnu/include/bits/libc-header-start.h \
>  /usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h \
>  /usr/x86_64-linux-gnu/include/bits/types.h \
>  /usr/x86_64-linux-gnu/include/bits/typesizes.h \
>  /usr/x86_64-linux-gnu/include/bits/types/__FILE.h \
>  /usr/x86_64-linux-gnu/include/bits/types/FILE.h \
>  /usr/x86_64-linux-gnu/include/bits/libio.h \
>  /usr/x86_64-linux-gnu/include/bits/_G_config.h \
>  /usr/x86_64-linux-gnu/include/bits/types/__mbstate_t.h \
>  /usr/lib/gcc/x86_64-linux-gnu/8/include/stdarg.h \
>  /usr/x86_64-linux-gnu/include/bits/stdio_lim.h \
>  /usr/x86_64-linux-gnu/include/bits/sys_errlist.h \
>  /usr/include/c++/8/locale /usr/include/c++/8/bits/localefwd.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h \
>  /usr/include/c++/8/clocale /usr/x86_64-linux-gnu/include/locale.h \
>  /usr/x86_64-linux-gnu/include/bits/locale.h \
>  /usr/x86_64-linux-gnu/include/bits/types/locale_t.h \
>  /usr/x86_64-linux-gnu/include/bits/types/__locale_t.h \
>  /usr/include/c++/8/iosfwd /usr/include/c++/8/bits/stringfwd.h \
>  /usr/include/c++/8/bits/memoryfwd.h /usr/include/c++/8/bits/postypes.h \
>  /usr/include/c++/8/cwchar /usr/x86_64-linux-gnu/include/wchar.h \
>  /usr/x86_64-linux-gnu/include/bits/floatn.h \
>  /usr/x86_64-linux-gnu/include/bits/floatn-common.h \
>  /usr/x86_64-linux-gnu/include/bits/wchar.h \
>  /usr/x86_64-linux-gnu/include/bits/types/wint_t.h \
>  /usr/x86_64-linux-gnu/include/bits/types/mbstate_t.h \
>  /usr/include/c++/8/cctype /usr/x86_64-linux-gnu/include/ctype.h \
>  /usr/x86_64-linux-gnu/include/endian.h \
>  /usr/x86_64-linux-gnu/include/bits/endian.h \
>  /usr/x86_64-linux-gnu/include/bits/byteswap.h \
>  /usr/x86_64-linux-gnu/include/bits/byteswap-16.h \
>  /usr/x86_64-linux-gnu/include/bits/uintn-identity.h \
>  /usr/include/c++/8/bits/locale_classes.h /usr/include/c++/8/string \
>  /usr/include/c++/8/bits/char_traits.h \
>  /usr/include/c++/8/bits/stl_algobase.h \
>  /usr/include/c++/8/bits/functexcept.h \
>  /usr/include/c++/8/bits/exception_defines.h \
>  /usr/include/c++/8/bits/cpp_type_traits.h \
>  /usr/include/c++/8/ext/type_traits.h \
>  /usr/include/c++/8/ext/numeric_traits.h \
>  /usr/include/c++/8/bits/stl_pair.h /usr/include/c++/8/bits/move.h \
>  /usr/include/c++/8/bits/concept_check.h /usr/include/c++/8/type_traits \
>  /usr/include/c++/8/bits/stl_iterator_base_types.h \
>  /usr/include/c++/8/bits/stl_iterator_base_funcs.h \
>  /usr/include/c++/8/debug/assertions.h \
>  /usr/include/c++/8/bits/stl_iterator.h \
>  /usr/include/c++/8/bits/ptr_traits.h /usr/include/c++/8/debug/debug.h \
>  /usr/include/c++/8/bits/predefined_ops.h /usr/include/c++/8/cstdint \
>  /usr/lib/gcc/x86_64-linux-gnu/8/include/stdint.h \
>  /usr/x86_64-linux-gnu/include/stdint.h \
>  /usr/x86_64-linux-gnu/include/bits/stdint-intn.h \
>  /usr/x86_64-linux-gnu/include/bits/stdint-uintn.h \
>  /usr/include/c++/8/bits/allocator.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/c++allocator.h \
>  /usr/include/c++/8/ext/new_allocator.h /usr/include/c++/8/new \
>  /usr/include/c++/8/exception /usr/include/c++/8/bits/exception.h \
>  /usr/include/c++/8/bits/exception_ptr.h \
>  /usr/include/c++/8/bits/cxxabi_init_exception.h \
>  /usr/include/c++/8/typeinfo /usr/include/c++/8/bits/hash_bytes.h \
>  /usr/include/c++/8/bits/nested_exception.h \
>  /usr/include/c++/8/bits/ostream_insert.h \
>  /usr/include/c++/8/bits/cxxabi_forced.h \
>  /usr/include/c++/8/bits/stl_function.h \
>  /usr/include/c++/8/backward/binders.h \
>  /usr/include/c++/8/bits/range_access.h \
>  /usr/include/c++/8/initializer_list \
>  /usr/include/c++/8/bits/basic_string.h \
>  /usr/include/c++/8/ext/atomicity.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/gthr.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h \
>  /usr/x86_64-linux-gnu/include/pthread.h \
>  /usr/x86_64-linux-gnu/include/sched.h \
>  /usr/x86_64-linux-gnu/include/bits/types/time_t.h \
>  /usr/x86_64-linux-gnu/include/bits/types/struct_timespec.h \
>  /usr/x86_64-linux-gnu/include/bits/sched.h \
>  /usr/x86_64-linux-gnu/include/bits/cpu-set.h \
>  /usr/x86_64-linux-gnu/include/time.h \
>  /usr/x86_64-linux-gnu/include/bits/time.h \
>  /usr/x86_64-linux-gnu/include/bits/timex.h \
>  /usr/x86_64-linux-gnu/include/bits/types/struct_timeval.h \
>  /usr/x86_64-linux-gnu/include/bits/types/clock_t.h \
>  /usr/x86_64-linux-gnu/include/bits/types/struct_tm.h \
>  /usr/x86_64-linux-gnu/include/bits/types/clockid_t.h \
>  /usr/x86_64-linux-gnu/include/bits/types/timer_t.h \
>  /usr/x86_64-linux-gnu/include/bits/types/struct_itimerspec.h \
>  /usr/x86_64-linux-gnu/include/bits/pthreadtypes.h \
>  /usr/x86_64-linux-gnu/include/bits/thread-shared-types.h \
>  /usr/x86_64-linux-gnu/include/bits/pthreadtypes-arch.h \
>  /usr/x86_64-linux-gnu/include/bits/setjmp.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/atomic_word.h \
>  /usr/include/c++/8/ext/alloc_traits.h \
>  /usr/include/c++/8/bits/alloc_traits.h \
>  /usr/include/c++/8/ext/string_conversions.h /usr/include/c++/8/cstdlib \
>  /usr/x86_64-linux-gnu/include/stdlib.h \
>  /usr/x86_64-linux-gnu/include/bits/waitflags.h \
>  /usr/x86_64-linux-gnu/include/bits/waitstatus.h \
>  /usr/x86_64-linux-gnu/include/sys/types.h \
>  /usr/x86_64-linux-gnu/include/sys/select.h \
>  /usr/x86_64-linux-gnu/include/bits/select.h \
>  /usr/x86_64-linux-gnu/include/bits/types/sigset_t.h \
>  /usr/x86_64-linux-gnu/include/bits/types/__sigset_t.h \
>  /usr/x86_64-linux-gnu/include/sys/sysmacros.h \
>  /usr/x86_64-linux-gnu/include/bits/sysmacros.h \
>  /usr/x86_64-linux-gnu/include/alloca.h \
>  /usr/x86_64-linux-gnu/include/bits/stdlib-float.h \
>  /usr/include/c++/8/bits/std_abs.h /usr/include/c++/8/cerrno \
>  /usr/x86_64-linux-gnu/include/errno.h \
>  /usr/x86_64-linux-gnu/include/bits/errno.h \
>  /usr/x86_64-linux-gnu/include/linux/errno.h \
>  /usr/x86_64-linux-gnu/include/asm/errno.h \
>  /usr/x86_64-linux-gnu/include/asm-generic/errno.h \
>  /usr/x86_64-linux-gnu/include/asm-generic/errno-base.h \
>  /usr/include/c++/8/bits/functional_hash.h \
>  /usr/include/c++/8/bits/basic_string.tcc \
>  /usr/include/c++/8/bits/locale_classes.tcc \
>  /usr/include/c++/8/bits/locale_facets.h /usr/include/c++/8/cwctype \
>  /usr/x86_64-linux-gnu/include/wctype.h \
>  /usr/x86_64-linux-gnu/include/bits/wctype-wchar.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/ctype_base.h \
>  /usr/include/c++/8/bits/ios_base.h /usr/include/c++/8/system_error \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/error_constants.h \
>  /usr/include/c++/8/stdexcept /usr/include/c++/8/streambuf \
>  /usr/include/c++/8/bits/streambuf.tcc \
>  /usr/include/c++/8/bits/streambuf_iterator.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/ctype_inline.h \
>  /usr/include/c++/8/bits/locale_facets.tcc \
>  /usr/include/c++/8/bits/locale_facets_nonio.h /usr/include/c++/8/ctime \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/time_members.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/messages_members.h \
>  /usr/x86_64-linux-gnu/include/libintl.h \
>  /usr/include/c++/8/bits/codecvt.h \
>  /usr/include/c++/8/bits/locale_facets_nonio.tcc \
>  /usr/include/c++/8/bits/locale_conv.h \
>  /usr/include/c++/8/bits/unique_ptr.h /usr/include/c++/8/utility \
>  /usr/include/c++/8/bits/stl_relops.h /usr/include/c++/8/tuple \
>  /usr/include/c++/8/array /usr/include/c++/8/bits/uses_allocator.h \
>  /usr/include/c++/8/bits/invoke.h /usr/include/c++/8/fstream \
>  /usr/include/c++/8/istream /usr/include/c++/8/ios \
>  /usr/include/c++/8/bits/basic_ios.h \
>  /usr/include/c++/8/bits/basic_ios.tcc /usr/include/c++/8/ostream \
>  /usr/include/c++/8/bits/ostream.tcc /usr/include/c++/8/bits/istream.tcc \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/basic_file.h \
>  /usr/include/x86_64-linux-gnu/c++/8/bits/c++io.h \
>  /usr/include/c++/8/bits/fstream.tcc /usr/include/c++/8/iostream \
>  /usr/include/c++/8/filesystem
>
>
> amazing, no? cmake find only 9 dependencies against 100+ real ones (and I don't even speak of errors that can be caused in parsing if some -D option is changed....
>
> thanks and regards
> JLM
>
>
> Le lun. 24 juin 2019 à 14:14, Robert Maynard <[hidden email]> a écrit :
>>
>> It look that starting with CMake 3.6 modification of system headers
>> will cause CMake to recompile projects. What version of CMake and your
>> compiler are you using?
>>
>> On Mon, Jun 17, 2019 at 9:40 AM jl forums <[hidden email]> wrote:
>> >
>> > Hi,
>> > I want to create a full tag file and for this require to know the compiler full include path...  there is a way to had custom includes path but didn't found any variables for the include path....
>> > for example :
>> > $ gcc-8 -v -x c -E /dev/null
>> > Using built-in specs.
>> > [....]
>> > ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
>> > #include "..." search starts here:
>> > #include <...> search starts here:
>> >  /usr/lib/gcc/x86_64-linux-gnu/8/include
>> >  /usr/local/include
>> >  /usr/lib/gcc/x86_64-linux-gnu/8/include-fixed
>> >  /usr/x86_64-linux-gnu/include
>> >  /usr/include/x86_64-linux-gnu
>> >  /usr/include
>> > End of search list.
>> > [...]
>> >
>> > $ gcc -v -x c -E /dev/null
>> > Using built-in specs.
>> > [...]
>> > ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
>> > #include "..." search starts here:
>> > #include <...> search starts here:
>> >  /usr/lib/gcc/x86_64-linux-gnu/7/include
>> >  /usr/local/include
>> >  /usr/lib/gcc/x86_64-linux-gnu/7/include-fixed
>> >  /usr/x86_64-linux-gnu/include
>> >  /usr/include/x86_64-linux-gnu
>> >  /usr/include
>> > End of search list.
>> > [...]
>> >
>> > I tried to
>> >
>> >
>> > get_target_property(moggle_interface_includes FileSync INTERFACE_INCLUDE_DIRECTORIES)
>> > message("Moggle interface includes: ${moggle_interface_includes}")
>> >
>> > get_target_property(motor_includes FileSync INCLUDE_DIRECTORIES)
>> > message("MOTOR includes ${motor_includes}")
>> >
>> > but I get
>> >
>> > Moggle interface includes: moggle_interface_includes-NOTFOUND
>> > MOTOR includes motor_includes-NOTFOUND
>> >
>> >
>> > there is also some issue because cmake strip dependencies from system's include, which means that updating a system software won't cause rebuild and consider that the build is uptodate, causing unexpected results
>> > seems that there is ways to workaround this :  https://stackoverflow.com/questions/7461000/handling-header-files-dependencies-with-cmake but this is ugly... would be better to let the user choose with an option
>> >
>> > thanks and regards
>> > JLM
>> > --
>> >
>> > 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

--

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

Re: getting compiler's include paths

Robert Maynard
I am not an user of ctags. But CMake supports generating a
`compile_commands.json` for the Makefile and Ninja generator (
https://cmake.org/cmake/help/latest/variable/CMAKE_EXPORT_COMPILE_COMMANDS.html
). That will have all the include directories for each target.

On Sun, Jul 7, 2019 at 10:27 AM jl forums <[hidden email]> wrote:

>
> ok, thanks
> by the way what about my ctags rule? how can i get the include path of an app? so that i can pass it to ctags and have my tags produced?
> thanks and regards
> jlm
>
> Le mer. 3 juil. 2019 à 16:52, Robert Maynard <[hidden email]> a écrit :
>>
>> I completely forgot that the Makefiles based generators in CMake have
>> a separate heuristic for determining system headers.
>>
>> If you use the Ninja generator I see the expected behavior:
>> ~/W/t/nbuild $ sudo touch /usr/include/c++/7/array
>> ~/W/t/nbuild $ ninja -d explain -v
>> ninja explain: output test/CMakeFiles/ProjTest.dir/test.cpp.o older
>> than most recent input /usr/include/c++/7/array (1562165327 vs
>> 1562165329)
>> ninja explain: test/CMakeFiles/ProjTest.dir/test.cpp.o is dirty
>> ninja explain: test/ProjTest is dirty
>> [1/2] /usr/bin/c++   -I../my_lib/include -std=gnu++1z -MD -MT
>> test/CMakeFiles/ProjTest.dir/test.cpp.o -MF
>> test/CMakeFiles/ProjTest.dir/test.cpp.o.d -o
>> test/CMakeFiles/ProjTest.dir/test.cpp.o -c ../test/test.cpp
>> [2/2] : && /usr/bin/c++     test/CMakeFiles/ProjTest.dir/test.cpp.o
>> -o test/ProjTest   && :
>>
>>
>> I will need to spend some more time figuring out the extra include
>> caching logic for the Makefile based generators, and will report back.
>>
>> On Thu, Jun 27, 2019 at 8:59 AM jl forums <[hidden email]> wrote:
>> >
>> > thanks for the anwer....
>> > quite not... I'm using cmake 3.14.2 (so, far away from 3.6....) and have a look, in main.cpp, there is #include <filesystem>:
>> >
>> > $ find /usr/include/ -name filesystem
>> > /usr/include/c++/5/experimental/filesystem
>> > /usr/include/c++/7/experimental/filesystem
>> > /usr/include/c++/8/filesystem
>> > /usr/include/c++/8/experimental/filesystem
>> > $ sudo touch /usr/include/c++/5/experimental/filesystem /usr/include/c++/7/experimental/filesystem /usr/include/c++/8/filesystem /usr/include/c++/8/experimental/filesystem
>> > $ make
>> > [100%] Built target FileSync
>> > $ touch ../main.cxx
>> > $ make
>> > Scanning dependencies of target FileSync
>> > [ 50%] Building CXX object CMakeFiles/FileSync.dir/main.cxx.o
>> > [100%] Linking CXX executable FileSync
>> > [100%] Built target FileSync
>> >
>> >
>> > => cmake don't create "full include dependency" which IS a mistake.... updating system g++ can just assume the target is uptodate and in fact just create a broken build...
>> >
>> > in cmake cxx.includecache
>> >
>> > #IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">])
>> > #IncludeRegexScan: ^.*$
>> > #IncludeRegexComplain: ^$
>> > #IncludeRegexTransform:
>> > /home/orange/crypt/Devel/projets/FileSync/main.cxx
>> > cstdio
>> > -
>> > io.h
>> > -
>> > fcntl.h
>> > -
>> > locale
>> > -
>> > clocale
>> > -
>> > fstream
>> > -
>> > iostream
>> > -
>> > filesystem
>> > -
>> >
>> > $ /usr/bin/gcc-8 -M ../main.cxx
>> > main.o: ../main.cxx /usr/x86_64-linux-gnu/include/stdc-predef.h \
>> >  /usr/include/c++/8/cstdio \
>> >  /usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h \
>> >  /usr/include/x86_64-linux-gnu/c++/8/bits/os_defines.h \
>> >  /usr/x86_64-linux-gnu/include/features.h \
>> >  /usr/x86_64-linux-gnu/include/sys/cdefs.h \
>> >  /usr/x86_64-linux-gnu/include/bits/wordsize.h \
>> >  /usr/x86_64-linux-gnu/include/bits/long-double.h \
>> >  /usr/x86_64-linux-gnu/include/gnu/stubs.h \
>> >  /usr/x86_64-linux-gnu/include/gnu/stubs-64.h \
>> >  /usr/include/x86_64-linux-gnu/c++/8/bits/cpu_defines.h \
>> >  /usr/x86_64-linux-gnu/include/stdio.h \
>> >  /usr/x86_64-linux-gnu/include/bits/libc-header-start.h \
>> >  /usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h \
>> >  /usr/x86_64-linux-gnu/include/bits/types.h \
>> >  /usr/x86_64-linux-gnu/include/bits/typesizes.h \
>> >  /usr/x86_64-linux-gnu/include/bits/types/__FILE.h \
>> >  /usr/x86_64-linux-gnu/include/bits/types/FILE.h \
>> >  /usr/x86_64-linux-gnu/include/bits/libio.h \
>> >  /usr/x86_64-linux-gnu/include/bits/_G_config.h \
>> >  /usr/x86_64-linux-gnu/include/bits/types/__mbstate_t.h \
>> >  /usr/lib/gcc/x86_64-linux-gnu/8/include/stdarg.h \
>> >  /usr/x86_64-linux-gnu/include/bits/stdio_lim.h \
>> >  /usr/x86_64-linux-gnu/include/bits/sys_errlist.h \
>> >  /usr/include/c++/8/locale /usr/include/c++/8/bits/localefwd.h \
>> >  /usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h \
>> >  /usr/include/c++/8/clocale /usr/x86_64-linux-gnu/include/locale.h \
>> >  /usr/x86_64-linux-gnu/include/bits/locale.h \
>> >  /usr/x86_64-linux-gnu/include/bits/types/locale_t.h \
>> >  /usr/x86_64-linux-gnu/include/bits/types/__locale_t.h \
>> >  /usr/include/c++/8/iosfwd /usr/include/c++/8/bits/stringfwd.h \
>> >  /usr/include/c++/8/bits/memoryfwd.h /usr/include/c++/8/bits/postypes.h \
>> >  /usr/include/c++/8/cwchar /usr/x86_64-linux-gnu/include/wchar.h \
>> >  /usr/x86_64-linux-gnu/include/bits/floatn.h \
>> >  /usr/x86_64-linux-gnu/include/bits/floatn-common.h \
>> >  /usr/x86_64-linux-gnu/include/bits/wchar.h \
>> >  /usr/x86_64-linux-gnu/include/bits/types/wint_t.h \
>> >  /usr/x86_64-linux-gnu/include/bits/types/mbstate_t.h \
>> >  /usr/include/c++/8/cctype /usr/x86_64-linux-gnu/include/ctype.h \
>> >  /usr/x86_64-linux-gnu/include/endian.h \
>> >  /usr/x86_64-linux-gnu/include/bits/endian.h \
>> >  /usr/x86_64-linux-gnu/include/bits/byteswap.h \
>> >  /usr/x86_64-linux-gnu/include/bits/byteswap-16.h \
>> >  /usr/x86_64-linux-gnu/include/bits/uintn-identity.h \
>> >  /usr/include/c++/8/bits/locale_classes.h /usr/include/c++/8/string \
>> >  /usr/include/c++/8/bits/char_traits.h \
>> >  /usr/include/c++/8/bits/stl_algobase.h \
>> >  /usr/include/c++/8/bits/functexcept.h \
>> >  /usr/include/c++/8/bits/exception_defines.h \
>> >  /usr/include/c++/8/bits/cpp_type_traits.h \
>> >  /usr/include/c++/8/ext/type_traits.h \
>> >  /usr/include/c++/8/ext/numeric_traits.h \
>> >  /usr/include/c++/8/bits/stl_pair.h /usr/include/c++/8/bits/move.h \
>> >  /usr/include/c++/8/bits/concept_check.h /usr/include/c++/8/type_traits \
>> >  /usr/include/c++/8/bits/stl_iterator_base_types.h \
>> >  /usr/include/c++/8/bits/stl_iterator_base_funcs.h \
>> >  /usr/include/c++/8/debug/assertions.h \
>> >  /usr/include/c++/8/bits/stl_iterator.h \
>> >  /usr/include/c++/8/bits/ptr_traits.h /usr/include/c++/8/debug/debug.h \
>> >  /usr/include/c++/8/bits/predefined_ops.h /usr/include/c++/8/cstdint \
>> >  /usr/lib/gcc/x86_64-linux-gnu/8/include/stdint.h \
>> >  /usr/x86_64-linux-gnu/include/stdint.h \
>> >  /usr/x86_64-linux-gnu/include/bits/stdint-intn.h \
>> >  /usr/x86_64-linux-gnu/include/bits/stdint-uintn.h \
>> >  /usr/include/c++/8/bits/allocator.h \
>> >  /usr/include/x86_64-linux-gnu/c++/8/bits/c++allocator.h \
>> >  /usr/include/c++/8/ext/new_allocator.h /usr/include/c++/8/new \
>> >  /usr/include/c++/8/exception /usr/include/c++/8/bits/exception.h \
>> >  /usr/include/c++/8/bits/exception_ptr.h \
>> >  /usr/include/c++/8/bits/cxxabi_init_exception.h \
>> >  /usr/include/c++/8/typeinfo /usr/include/c++/8/bits/hash_bytes.h \
>> >  /usr/include/c++/8/bits/nested_exception.h \
>> >  /usr/include/c++/8/bits/ostream_insert.h \
>> >  /usr/include/c++/8/bits/cxxabi_forced.h \
>> >  /usr/include/c++/8/bits/stl_function.h \
>> >  /usr/include/c++/8/backward/binders.h \
>> >  /usr/include/c++/8/bits/range_access.h \
>> >  /usr/include/c++/8/initializer_list \
>> >  /usr/include/c++/8/bits/basic_string.h \
>> >  /usr/include/c++/8/ext/atomicity.h \
>> >  /usr/include/x86_64-linux-gnu/c++/8/bits/gthr.h \
>> >  /usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h \
>> >  /usr/x86_64-linux-gnu/include/pthread.h \
>> >  /usr/x86_64-linux-gnu/include/sched.h \
>> >  /usr/x86_64-linux-gnu/include/bits/types/time_t.h \
>> >  /usr/x86_64-linux-gnu/include/bits/types/struct_timespec.h \
>> >  /usr/x86_64-linux-gnu/include/bits/sched.h \
>> >  /usr/x86_64-linux-gnu/include/bits/cpu-set.h \
>> >  /usr/x86_64-linux-gnu/include/time.h \
>> >  /usr/x86_64-linux-gnu/include/bits/time.h \
>> >  /usr/x86_64-linux-gnu/include/bits/timex.h \
>> >  /usr/x86_64-linux-gnu/include/bits/types/struct_timeval.h \
>> >  /usr/x86_64-linux-gnu/include/bits/types/clock_t.h \
>> >  /usr/x86_64-linux-gnu/include/bits/types/struct_tm.h \
>> >  /usr/x86_64-linux-gnu/include/bits/types/clockid_t.h \
>> >  /usr/x86_64-linux-gnu/include/bits/types/timer_t.h \
>> >  /usr/x86_64-linux-gnu/include/bits/types/struct_itimerspec.h \
>> >  /usr/x86_64-linux-gnu/include/bits/pthreadtypes.h \
>> >  /usr/x86_64-linux-gnu/include/bits/thread-shared-types.h \
>> >  /usr/x86_64-linux-gnu/include/bits/pthreadtypes-arch.h \
>> >  /usr/x86_64-linux-gnu/include/bits/setjmp.h \
>> >  /usr/include/x86_64-linux-gnu/c++/8/bits/atomic_word.h \
>> >  /usr/include/c++/8/ext/alloc_traits.h \
>> >  /usr/include/c++/8/bits/alloc_traits.h \
>> >  /usr/include/c++/8/ext/string_conversions.h /usr/include/c++/8/cstdlib \
>> >  /usr/x86_64-linux-gnu/include/stdlib.h \
>> >  /usr/x86_64-linux-gnu/include/bits/waitflags.h \
>> >  /usr/x86_64-linux-gnu/include/bits/waitstatus.h \
>> >  /usr/x86_64-linux-gnu/include/sys/types.h \
>> >  /usr/x86_64-linux-gnu/include/sys/select.h \
>> >  /usr/x86_64-linux-gnu/include/bits/select.h \
>> >  /usr/x86_64-linux-gnu/include/bits/types/sigset_t.h \
>> >  /usr/x86_64-linux-gnu/include/bits/types/__sigset_t.h \
>> >  /usr/x86_64-linux-gnu/include/sys/sysmacros.h \
>> >  /usr/x86_64-linux-gnu/include/bits/sysmacros.h \
>> >  /usr/x86_64-linux-gnu/include/alloca.h \
>> >  /usr/x86_64-linux-gnu/include/bits/stdlib-float.h \
>> >  /usr/include/c++/8/bits/std_abs.h /usr/include/c++/8/cerrno \
>> >  /usr/x86_64-linux-gnu/include/errno.h \
>> >  /usr/x86_64-linux-gnu/include/bits/errno.h \
>> >  /usr/x86_64-linux-gnu/include/linux/errno.h \
>> >  /usr/x86_64-linux-gnu/include/asm/errno.h \
>> >  /usr/x86_64-linux-gnu/include/asm-generic/errno.h \
>> >  /usr/x86_64-linux-gnu/include/asm-generic/errno-base.h \
>> >  /usr/include/c++/8/bits/functional_hash.h \
>> >  /usr/include/c++/8/bits/basic_string.tcc \
>> >  /usr/include/c++/8/bits/locale_classes.tcc \
>> >  /usr/include/c++/8/bits/locale_facets.h /usr/include/c++/8/cwctype \
>> >  /usr/x86_64-linux-gnu/include/wctype.h \
>> >  /usr/x86_64-linux-gnu/include/bits/wctype-wchar.h \
>> >  /usr/include/x86_64-linux-gnu/c++/8/bits/ctype_base.h \
>> >  /usr/include/c++/8/bits/ios_base.h /usr/include/c++/8/system_error \
>> >  /usr/include/x86_64-linux-gnu/c++/8/bits/error_constants.h \
>> >  /usr/include/c++/8/stdexcept /usr/include/c++/8/streambuf \
>> >  /usr/include/c++/8/bits/streambuf.tcc \
>> >  /usr/include/c++/8/bits/streambuf_iterator.h \
>> >  /usr/include/x86_64-linux-gnu/c++/8/bits/ctype_inline.h \
>> >  /usr/include/c++/8/bits/locale_facets.tcc \
>> >  /usr/include/c++/8/bits/locale_facets_nonio.h /usr/include/c++/8/ctime \
>> >  /usr/include/x86_64-linux-gnu/c++/8/bits/time_members.h \
>> >  /usr/include/x86_64-linux-gnu/c++/8/bits/messages_members.h \
>> >  /usr/x86_64-linux-gnu/include/libintl.h \
>> >  /usr/include/c++/8/bits/codecvt.h \
>> >  /usr/include/c++/8/bits/locale_facets_nonio.tcc \
>> >  /usr/include/c++/8/bits/locale_conv.h \
>> >  /usr/include/c++/8/bits/unique_ptr.h /usr/include/c++/8/utility \
>> >  /usr/include/c++/8/bits/stl_relops.h /usr/include/c++/8/tuple \
>> >  /usr/include/c++/8/array /usr/include/c++/8/bits/uses_allocator.h \
>> >  /usr/include/c++/8/bits/invoke.h /usr/include/c++/8/fstream \
>> >  /usr/include/c++/8/istream /usr/include/c++/8/ios \
>> >  /usr/include/c++/8/bits/basic_ios.h \
>> >  /usr/include/c++/8/bits/basic_ios.tcc /usr/include/c++/8/ostream \
>> >  /usr/include/c++/8/bits/ostream.tcc /usr/include/c++/8/bits/istream.tcc \
>> >  /usr/include/x86_64-linux-gnu/c++/8/bits/basic_file.h \
>> >  /usr/include/x86_64-linux-gnu/c++/8/bits/c++io.h \
>> >  /usr/include/c++/8/bits/fstream.tcc /usr/include/c++/8/iostream \
>> >  /usr/include/c++/8/filesystem
>> >
>> >
>> > amazing, no? cmake find only 9 dependencies against 100+ real ones (and I don't even speak of errors that can be caused in parsing if some -D option is changed....
>> >
>> > thanks and regards
>> > JLM
>> >
>> >
>> > Le lun. 24 juin 2019 à 14:14, Robert Maynard <[hidden email]> a écrit :
>> >>
>> >> It look that starting with CMake 3.6 modification of system headers
>> >> will cause CMake to recompile projects. What version of CMake and your
>> >> compiler are you using?
>> >>
>> >> On Mon, Jun 17, 2019 at 9:40 AM jl forums <[hidden email]> wrote:
>> >> >
>> >> > Hi,
>> >> > I want to create a full tag file and for this require to know the compiler full include path...  there is a way to had custom includes path but didn't found any variables for the include path....
>> >> > for example :
>> >> > $ gcc-8 -v -x c -E /dev/null
>> >> > Using built-in specs.
>> >> > [....]
>> >> > ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
>> >> > #include "..." search starts here:
>> >> > #include <...> search starts here:
>> >> >  /usr/lib/gcc/x86_64-linux-gnu/8/include
>> >> >  /usr/local/include
>> >> >  /usr/lib/gcc/x86_64-linux-gnu/8/include-fixed
>> >> >  /usr/x86_64-linux-gnu/include
>> >> >  /usr/include/x86_64-linux-gnu
>> >> >  /usr/include
>> >> > End of search list.
>> >> > [...]
>> >> >
>> >> > $ gcc -v -x c -E /dev/null
>> >> > Using built-in specs.
>> >> > [...]
>> >> > ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
>> >> > #include "..." search starts here:
>> >> > #include <...> search starts here:
>> >> >  /usr/lib/gcc/x86_64-linux-gnu/7/include
>> >> >  /usr/local/include
>> >> >  /usr/lib/gcc/x86_64-linux-gnu/7/include-fixed
>> >> >  /usr/x86_64-linux-gnu/include
>> >> >  /usr/include/x86_64-linux-gnu
>> >> >  /usr/include
>> >> > End of search list.
>> >> > [...]
>> >> >
>> >> > I tried to
>> >> >
>> >> >
>> >> > get_target_property(moggle_interface_includes FileSync INTERFACE_INCLUDE_DIRECTORIES)
>> >> > message("Moggle interface includes: ${moggle_interface_includes}")
>> >> >
>> >> > get_target_property(motor_includes FileSync INCLUDE_DIRECTORIES)
>> >> > message("MOTOR includes ${motor_includes}")
>> >> >
>> >> > but I get
>> >> >
>> >> > Moggle interface includes: moggle_interface_includes-NOTFOUND
>> >> > MOTOR includes motor_includes-NOTFOUND
>> >> >
>> >> >
>> >> > there is also some issue because cmake strip dependencies from system's include, which means that updating a system software won't cause rebuild and consider that the build is uptodate, causing unexpected results
>> >> > seems that there is ways to workaround this :  https://stackoverflow.com/questions/7461000/handling-header-files-dependencies-with-cmake but this is ugly... would be better to let the user choose with an option
>> >> >
>> >> > thanks and regards
>> >> > JLM
>> >> > --
>> >> >
>> >> > 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
--

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

Re: getting compiler's include paths

Robert Maynard
In reply to this post by Robert Maynard
The history behind the makefile generator and the custom dependency
tracking logic was that it was written before
the majority of compilers offered a robust way to generate the list of
header dependencies.

As it stands now we want to remove all this custom dependency scanning
logic, not extend it to understand system headers
( As the naive approach would cause CMake to parse system headers, and
slow down even more ). Luckily, C++20 modules
also require us to drop the custom dependency scanning, so when we add
C++20 module support to the Makefile generator
this issue will be fixed as by product.

On Wed, Jul 3, 2019 at 10:51 AM Robert Maynard
<[hidden email]> wrote:

>
> I completely forgot that the Makefiles based generators in CMake have
> a separate heuristic for determining system headers.
>
> If you use the Ninja generator I see the expected behavior:
> ~/W/t/nbuild $ sudo touch /usr/include/c++/7/array
> ~/W/t/nbuild $ ninja -d explain -v
> ninja explain: output test/CMakeFiles/ProjTest.dir/test.cpp.o older
> than most recent input /usr/include/c++/7/array (1562165327 vs
> 1562165329)
> ninja explain: test/CMakeFiles/ProjTest.dir/test.cpp.o is dirty
> ninja explain: test/ProjTest is dirty
> [1/2] /usr/bin/c++   -I../my_lib/include -std=gnu++1z -MD -MT
> test/CMakeFiles/ProjTest.dir/test.cpp.o -MF
> test/CMakeFiles/ProjTest.dir/test.cpp.o.d -o
> test/CMakeFiles/ProjTest.dir/test.cpp.o -c ../test/test.cpp
> [2/2] : && /usr/bin/c++     test/CMakeFiles/ProjTest.dir/test.cpp.o
> -o test/ProjTest   && :
>
>
> I will need to spend some more time figuring out the extra include
> caching logic for the Makefile based generators, and will report back.
>
> On Thu, Jun 27, 2019 at 8:59 AM jl forums <[hidden email]> wrote:
> >
> > thanks for the anwer....
> > quite not... I'm using cmake 3.14.2 (so, far away from 3.6....) and have a look, in main.cpp, there is #include <filesystem>:
> >
> > $ find /usr/include/ -name filesystem
> > /usr/include/c++/5/experimental/filesystem
> > /usr/include/c++/7/experimental/filesystem
> > /usr/include/c++/8/filesystem
> > /usr/include/c++/8/experimental/filesystem
> > $ sudo touch /usr/include/c++/5/experimental/filesystem /usr/include/c++/7/experimental/filesystem /usr/include/c++/8/filesystem /usr/include/c++/8/experimental/filesystem
> > $ make
> > [100%] Built target FileSync
> > $ touch ../main.cxx
> > $ make
> > Scanning dependencies of target FileSync
> > [ 50%] Building CXX object CMakeFiles/FileSync.dir/main.cxx.o
> > [100%] Linking CXX executable FileSync
> > [100%] Built target FileSync
> >
> >
> > => cmake don't create "full include dependency" which IS a mistake.... updating system g++ can just assume the target is uptodate and in fact just create a broken build...
> >
> > in cmake cxx.includecache
> >
> > #IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">])
> > #IncludeRegexScan: ^.*$
> > #IncludeRegexComplain: ^$
> > #IncludeRegexTransform:
> > /home/orange/crypt/Devel/projets/FileSync/main.cxx
> > cstdio
> > -
> > io.h
> > -
> > fcntl.h
> > -
> > locale
> > -
> > clocale
> > -
> > fstream
> > -
> > iostream
> > -
> > filesystem
> > -
> >
> > $ /usr/bin/gcc-8 -M ../main.cxx
> > main.o: ../main.cxx /usr/x86_64-linux-gnu/include/stdc-predef.h \
> >  /usr/include/c++/8/cstdio \
> >  /usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h \
> >  /usr/include/x86_64-linux-gnu/c++/8/bits/os_defines.h \
> >  /usr/x86_64-linux-gnu/include/features.h \
> >  /usr/x86_64-linux-gnu/include/sys/cdefs.h \
> >  /usr/x86_64-linux-gnu/include/bits/wordsize.h \
> >  /usr/x86_64-linux-gnu/include/bits/long-double.h \
> >  /usr/x86_64-linux-gnu/include/gnu/stubs.h \
> >  /usr/x86_64-linux-gnu/include/gnu/stubs-64.h \
> >  /usr/include/x86_64-linux-gnu/c++/8/bits/cpu_defines.h \
> >  /usr/x86_64-linux-gnu/include/stdio.h \
> >  /usr/x86_64-linux-gnu/include/bits/libc-header-start.h \
> >  /usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h \
> >  /usr/x86_64-linux-gnu/include/bits/types.h \
> >  /usr/x86_64-linux-gnu/include/bits/typesizes.h \
> >  /usr/x86_64-linux-gnu/include/bits/types/__FILE.h \
> >  /usr/x86_64-linux-gnu/include/bits/types/FILE.h \
> >  /usr/x86_64-linux-gnu/include/bits/libio.h \
> >  /usr/x86_64-linux-gnu/include/bits/_G_config.h \
> >  /usr/x86_64-linux-gnu/include/bits/types/__mbstate_t.h \
> >  /usr/lib/gcc/x86_64-linux-gnu/8/include/stdarg.h \
> >  /usr/x86_64-linux-gnu/include/bits/stdio_lim.h \
> >  /usr/x86_64-linux-gnu/include/bits/sys_errlist.h \
> >  /usr/include/c++/8/locale /usr/include/c++/8/bits/localefwd.h \
> >  /usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h \
> >  /usr/include/c++/8/clocale /usr/x86_64-linux-gnu/include/locale.h \
> >  /usr/x86_64-linux-gnu/include/bits/locale.h \
> >  /usr/x86_64-linux-gnu/include/bits/types/locale_t.h \
> >  /usr/x86_64-linux-gnu/include/bits/types/__locale_t.h \
> >  /usr/include/c++/8/iosfwd /usr/include/c++/8/bits/stringfwd.h \
> >  /usr/include/c++/8/bits/memoryfwd.h /usr/include/c++/8/bits/postypes.h \
> >  /usr/include/c++/8/cwchar /usr/x86_64-linux-gnu/include/wchar.h \
> >  /usr/x86_64-linux-gnu/include/bits/floatn.h \
> >  /usr/x86_64-linux-gnu/include/bits/floatn-common.h \
> >  /usr/x86_64-linux-gnu/include/bits/wchar.h \
> >  /usr/x86_64-linux-gnu/include/bits/types/wint_t.h \
> >  /usr/x86_64-linux-gnu/include/bits/types/mbstate_t.h \
> >  /usr/include/c++/8/cctype /usr/x86_64-linux-gnu/include/ctype.h \
> >  /usr/x86_64-linux-gnu/include/endian.h \
> >  /usr/x86_64-linux-gnu/include/bits/endian.h \
> >  /usr/x86_64-linux-gnu/include/bits/byteswap.h \
> >  /usr/x86_64-linux-gnu/include/bits/byteswap-16.h \
> >  /usr/x86_64-linux-gnu/include/bits/uintn-identity.h \
> >  /usr/include/c++/8/bits/locale_classes.h /usr/include/c++/8/string \
> >  /usr/include/c++/8/bits/char_traits.h \
> >  /usr/include/c++/8/bits/stl_algobase.h \
> >  /usr/include/c++/8/bits/functexcept.h \
> >  /usr/include/c++/8/bits/exception_defines.h \
> >  /usr/include/c++/8/bits/cpp_type_traits.h \
> >  /usr/include/c++/8/ext/type_traits.h \
> >  /usr/include/c++/8/ext/numeric_traits.h \
> >  /usr/include/c++/8/bits/stl_pair.h /usr/include/c++/8/bits/move.h \
> >  /usr/include/c++/8/bits/concept_check.h /usr/include/c++/8/type_traits \
> >  /usr/include/c++/8/bits/stl_iterator_base_types.h \
> >  /usr/include/c++/8/bits/stl_iterator_base_funcs.h \
> >  /usr/include/c++/8/debug/assertions.h \
> >  /usr/include/c++/8/bits/stl_iterator.h \
> >  /usr/include/c++/8/bits/ptr_traits.h /usr/include/c++/8/debug/debug.h \
> >  /usr/include/c++/8/bits/predefined_ops.h /usr/include/c++/8/cstdint \
> >  /usr/lib/gcc/x86_64-linux-gnu/8/include/stdint.h \
> >  /usr/x86_64-linux-gnu/include/stdint.h \
> >  /usr/x86_64-linux-gnu/include/bits/stdint-intn.h \
> >  /usr/x86_64-linux-gnu/include/bits/stdint-uintn.h \
> >  /usr/include/c++/8/bits/allocator.h \
> >  /usr/include/x86_64-linux-gnu/c++/8/bits/c++allocator.h \
> >  /usr/include/c++/8/ext/new_allocator.h /usr/include/c++/8/new \
> >  /usr/include/c++/8/exception /usr/include/c++/8/bits/exception.h \
> >  /usr/include/c++/8/bits/exception_ptr.h \
> >  /usr/include/c++/8/bits/cxxabi_init_exception.h \
> >  /usr/include/c++/8/typeinfo /usr/include/c++/8/bits/hash_bytes.h \
> >  /usr/include/c++/8/bits/nested_exception.h \
> >  /usr/include/c++/8/bits/ostream_insert.h \
> >  /usr/include/c++/8/bits/cxxabi_forced.h \
> >  /usr/include/c++/8/bits/stl_function.h \
> >  /usr/include/c++/8/backward/binders.h \
> >  /usr/include/c++/8/bits/range_access.h \
> >  /usr/include/c++/8/initializer_list \
> >  /usr/include/c++/8/bits/basic_string.h \
> >  /usr/include/c++/8/ext/atomicity.h \
> >  /usr/include/x86_64-linux-gnu/c++/8/bits/gthr.h \
> >  /usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h \
> >  /usr/x86_64-linux-gnu/include/pthread.h \
> >  /usr/x86_64-linux-gnu/include/sched.h \
> >  /usr/x86_64-linux-gnu/include/bits/types/time_t.h \
> >  /usr/x86_64-linux-gnu/include/bits/types/struct_timespec.h \
> >  /usr/x86_64-linux-gnu/include/bits/sched.h \
> >  /usr/x86_64-linux-gnu/include/bits/cpu-set.h \
> >  /usr/x86_64-linux-gnu/include/time.h \
> >  /usr/x86_64-linux-gnu/include/bits/time.h \
> >  /usr/x86_64-linux-gnu/include/bits/timex.h \
> >  /usr/x86_64-linux-gnu/include/bits/types/struct_timeval.h \
> >  /usr/x86_64-linux-gnu/include/bits/types/clock_t.h \
> >  /usr/x86_64-linux-gnu/include/bits/types/struct_tm.h \
> >  /usr/x86_64-linux-gnu/include/bits/types/clockid_t.h \
> >  /usr/x86_64-linux-gnu/include/bits/types/timer_t.h \
> >  /usr/x86_64-linux-gnu/include/bits/types/struct_itimerspec.h \
> >  /usr/x86_64-linux-gnu/include/bits/pthreadtypes.h \
> >  /usr/x86_64-linux-gnu/include/bits/thread-shared-types.h \
> >  /usr/x86_64-linux-gnu/include/bits/pthreadtypes-arch.h \
> >  /usr/x86_64-linux-gnu/include/bits/setjmp.h \
> >  /usr/include/x86_64-linux-gnu/c++/8/bits/atomic_word.h \
> >  /usr/include/c++/8/ext/alloc_traits.h \
> >  /usr/include/c++/8/bits/alloc_traits.h \
> >  /usr/include/c++/8/ext/string_conversions.h /usr/include/c++/8/cstdlib \
> >  /usr/x86_64-linux-gnu/include/stdlib.h \
> >  /usr/x86_64-linux-gnu/include/bits/waitflags.h \
> >  /usr/x86_64-linux-gnu/include/bits/waitstatus.h \
> >  /usr/x86_64-linux-gnu/include/sys/types.h \
> >  /usr/x86_64-linux-gnu/include/sys/select.h \
> >  /usr/x86_64-linux-gnu/include/bits/select.h \
> >  /usr/x86_64-linux-gnu/include/bits/types/sigset_t.h \
> >  /usr/x86_64-linux-gnu/include/bits/types/__sigset_t.h \
> >  /usr/x86_64-linux-gnu/include/sys/sysmacros.h \
> >  /usr/x86_64-linux-gnu/include/bits/sysmacros.h \
> >  /usr/x86_64-linux-gnu/include/alloca.h \
> >  /usr/x86_64-linux-gnu/include/bits/stdlib-float.h \
> >  /usr/include/c++/8/bits/std_abs.h /usr/include/c++/8/cerrno \
> >  /usr/x86_64-linux-gnu/include/errno.h \
> >  /usr/x86_64-linux-gnu/include/bits/errno.h \
> >  /usr/x86_64-linux-gnu/include/linux/errno.h \
> >  /usr/x86_64-linux-gnu/include/asm/errno.h \
> >  /usr/x86_64-linux-gnu/include/asm-generic/errno.h \
> >  /usr/x86_64-linux-gnu/include/asm-generic/errno-base.h \
> >  /usr/include/c++/8/bits/functional_hash.h \
> >  /usr/include/c++/8/bits/basic_string.tcc \
> >  /usr/include/c++/8/bits/locale_classes.tcc \
> >  /usr/include/c++/8/bits/locale_facets.h /usr/include/c++/8/cwctype \
> >  /usr/x86_64-linux-gnu/include/wctype.h \
> >  /usr/x86_64-linux-gnu/include/bits/wctype-wchar.h \
> >  /usr/include/x86_64-linux-gnu/c++/8/bits/ctype_base.h \
> >  /usr/include/c++/8/bits/ios_base.h /usr/include/c++/8/system_error \
> >  /usr/include/x86_64-linux-gnu/c++/8/bits/error_constants.h \
> >  /usr/include/c++/8/stdexcept /usr/include/c++/8/streambuf \
> >  /usr/include/c++/8/bits/streambuf.tcc \
> >  /usr/include/c++/8/bits/streambuf_iterator.h \
> >  /usr/include/x86_64-linux-gnu/c++/8/bits/ctype_inline.h \
> >  /usr/include/c++/8/bits/locale_facets.tcc \
> >  /usr/include/c++/8/bits/locale_facets_nonio.h /usr/include/c++/8/ctime \
> >  /usr/include/x86_64-linux-gnu/c++/8/bits/time_members.h \
> >  /usr/include/x86_64-linux-gnu/c++/8/bits/messages_members.h \
> >  /usr/x86_64-linux-gnu/include/libintl.h \
> >  /usr/include/c++/8/bits/codecvt.h \
> >  /usr/include/c++/8/bits/locale_facets_nonio.tcc \
> >  /usr/include/c++/8/bits/locale_conv.h \
> >  /usr/include/c++/8/bits/unique_ptr.h /usr/include/c++/8/utility \
> >  /usr/include/c++/8/bits/stl_relops.h /usr/include/c++/8/tuple \
> >  /usr/include/c++/8/array /usr/include/c++/8/bits/uses_allocator.h \
> >  /usr/include/c++/8/bits/invoke.h /usr/include/c++/8/fstream \
> >  /usr/include/c++/8/istream /usr/include/c++/8/ios \
> >  /usr/include/c++/8/bits/basic_ios.h \
> >  /usr/include/c++/8/bits/basic_ios.tcc /usr/include/c++/8/ostream \
> >  /usr/include/c++/8/bits/ostream.tcc /usr/include/c++/8/bits/istream.tcc \
> >  /usr/include/x86_64-linux-gnu/c++/8/bits/basic_file.h \
> >  /usr/include/x86_64-linux-gnu/c++/8/bits/c++io.h \
> >  /usr/include/c++/8/bits/fstream.tcc /usr/include/c++/8/iostream \
> >  /usr/include/c++/8/filesystem
> >
> >
> > amazing, no? cmake find only 9 dependencies against 100+ real ones (and I don't even speak of errors that can be caused in parsing if some -D option is changed....
> >
> > thanks and regards
> > JLM
> >
> >
> > Le lun. 24 juin 2019 à 14:14, Robert Maynard <[hidden email]> a écrit :
> >>
> >> It look that starting with CMake 3.6 modification of system headers
> >> will cause CMake to recompile projects. What version of CMake and your
> >> compiler are you using?
> >>
> >> On Mon, Jun 17, 2019 at 9:40 AM jl forums <[hidden email]> wrote:
> >> >
> >> > Hi,
> >> > I want to create a full tag file and for this require to know the compiler full include path...  there is a way to had custom includes path but didn't found any variables for the include path....
> >> > for example :
> >> > $ gcc-8 -v -x c -E /dev/null
> >> > Using built-in specs.
> >> > [....]
> >> > ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
> >> > #include "..." search starts here:
> >> > #include <...> search starts here:
> >> >  /usr/lib/gcc/x86_64-linux-gnu/8/include
> >> >  /usr/local/include
> >> >  /usr/lib/gcc/x86_64-linux-gnu/8/include-fixed
> >> >  /usr/x86_64-linux-gnu/include
> >> >  /usr/include/x86_64-linux-gnu
> >> >  /usr/include
> >> > End of search list.
> >> > [...]
> >> >
> >> > $ gcc -v -x c -E /dev/null
> >> > Using built-in specs.
> >> > [...]
> >> > ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
> >> > #include "..." search starts here:
> >> > #include <...> search starts here:
> >> >  /usr/lib/gcc/x86_64-linux-gnu/7/include
> >> >  /usr/local/include
> >> >  /usr/lib/gcc/x86_64-linux-gnu/7/include-fixed
> >> >  /usr/x86_64-linux-gnu/include
> >> >  /usr/include/x86_64-linux-gnu
> >> >  /usr/include
> >> > End of search list.
> >> > [...]
> >> >
> >> > I tried to
> >> >
> >> >
> >> > get_target_property(moggle_interface_includes FileSync INTERFACE_INCLUDE_DIRECTORIES)
> >> > message("Moggle interface includes: ${moggle_interface_includes}")
> >> >
> >> > get_target_property(motor_includes FileSync INCLUDE_DIRECTORIES)
> >> > message("MOTOR includes ${motor_includes}")
> >> >
> >> > but I get
> >> >
> >> > Moggle interface includes: moggle_interface_includes-NOTFOUND
> >> > MOTOR includes motor_includes-NOTFOUND
> >> >
> >> >
> >> > there is also some issue because cmake strip dependencies from system's include, which means that updating a system software won't cause rebuild and consider that the build is uptodate, causing unexpected results
> >> > seems that there is ways to workaround this :  https://stackoverflow.com/questions/7461000/handling-header-files-dependencies-with-cmake but this is ugly... would be better to let the user choose with an option
> >> >
> >> > thanks and regards
> >> > JLM
> >> > --
> >> >
> >> > 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
--

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