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 <jlmxyz.for...@gmail.com> 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 <robert.mayn...@kitware.com> 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 <jlmxyz.for...@gmail.com> 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 <robert.mayn...@kitware.com> >> > 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 <jlmxyz.for...@gmail.com> 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