å¿è ã®ããã¥ã¢ã«ã¯ãã®ãããªæ··åã«å¯ŸããŠèŠåããŠããŸãããããã¯æ·±å»ãªå¶éã«ãªã£ãŠããŸãã
åé¡ã¯ããã«ãã·ã¹ãã ããœãŒã¹ãã¡ã€ã«ãžã®çµ¶å¯Ÿãã¹ã䜿çšããŠã³ã³ãã€ã©ãåŒã³åºãããšãæãã§ããããšã§ãã ããã«ãããIDEããšã©ãŒã¡ãã»ãŒãžãšäžèŽããå ã®ãã¡ã€ã«ãåç §ããããã®ããè¯ãåºåãçæãããŸãã ãŸãããããã°æ å ±ã«èšé²ããããã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã ãã ããããã¯ããã«ããããã§ã¹ãã®çžå¯Ÿãã¹ã«å¯Ÿããå¿è ã®å¥œã¿ãšççŸããŸãã
ãã®åé¡ã瀺ãã¹ã¯ãªããã¯æ¬¡ã®ãšããã§ãïŒ ninja-bug.bash.txt
CcïŒ @nico @chaoren
CMakeã§ã 16675å·ã13894å·ãããã³MR520ã«é¢é£ããè°è«ããããŸãã
åé¿çãšããŠããããã§ããªããžã§ã¯ãåºåãã£ã¬ã¯ããªãæ瀺çã«èšå®ã§ããŸãã ãŸãã¯ã..ãã§ããã絶察ãã¹ãæ©èœããŸãã
ninjatst.bash.txt
@zlolik IIUCã¯ããã«ããããã§ã¹ãïŒ build.ninja
ïŒã°ã©ãããŒãã«çµ¶å¯Ÿãã¹ãé
眮ããããšããå§ãããŸãã 確ãã«ããã¯æ©èœããŸãïŒãããŠCMakeãã¢ãŠããªããœãŒã¹ãã«ãã§è¡ãããšã§ãïŒããããã§ã®ç§ã®ãã€ã³ãã¯ãNinjaã¯çµ¶å¯Ÿãã¹ã®äœ¿çšãæšå¥šããŠããŸããããIDEã¯åºåã§çµ¶å¯Ÿãã¹ãå¿
èŠãšããŸãã
ãŸãã -c foo.c
ãæå®ããã³ã³ãã€ã©ãããšã«ããdepfileã«çµ¶å¯Ÿãã¹ãçæããå¯èœæ§ããããŸãã ãã®å Žåãããã§å ±åãããŠããã®ãšåãåé¡ããããããNinjaã¯äŸåé¢ä¿ãèªèããŸããã
ãããä¿®æ£ããã«ã¯ãNinjaãçžå¯Ÿãã¹ãšçµ¶å¯Ÿãã¹ãåããã¡ã€ã«ã§ãããå
éšã«2ã€ã§ã¯ãªã1ã€ã®ã°ã©ãããŒããããªãããšãèªèã§ããããã«ããå¿
èŠããããŸãã build.ninja
ãžã§ãã¬ãŒã¿ãŒã«ãã«ããããã§ã¹ãå
ã§äžè²«ããŠãã¹ã«ååãä»ããããã«äŸé Œããã®ãåççã§ãããããããã¯depfileåŠçã«å¯ŸããŠã®ã¿è¡ãã ãã§ååãªå ŽåããããŸãã
@bradkingãŸããå¿è
ã«åé¡ãããããšã«åæããŸããåé¿çãææ¡ããã ãã§ãã
ç§ã¯3ã€ã®é¢é£ããåé¡ããããšæããŸãïŒ
ç§ã¯2ã€ã®åé¿çã䜿çšããŸãïŒ
build.ninja
ãžã§ãã¬ãŒã¿ãŒã®ãã¹ã«ãã¬ãã£ãã¯ã¹$p
ãš$o
ã䜿çšããŸãã ç§ã®å Žåã $p
ãš$o
ã¯çµ¶å¯Ÿçãªãã®ã§ã¯ãªãã build.ninja
ãžã§ãã¬ãŒã¿ãŒãå®è¡ãããçŸåšã®ãã£ã¬ã¯ããªããã®çžå¯Ÿçãªãã®ã§ããåèãŸã§ã«ãææ¡ããã解決çã䜿çšããŠninja-build
ã¡ãŒãªã³ã°ãªã¹ãã®ã¹ã¬ãããéå§ããŸããã
ãããã°ããã³ã«ãã¬ããžæ å ±ã«é¢ããå¥ã®é¢é£ããåé¡ïŒçžå¯Ÿãã¹ã§ã³ãã³ãã䜿çšãããšãçžå¯Ÿãã¹ã§ãããã°æ å ±ãã¡ã€ã«ãäœæãããŸãã åé¡ã¯ããããã°ãã¡ã€ã«ã¯éåžžããœãŒã¹ãã¡ã€ã«ã§ã¯ãªããªããžã§ã¯ããã¡ã€ã«ã®é£ã«é 眮ããããããããã«ããçžå¯Ÿãã¹ãååšããªããã¡ã€ã«ãåç §ããããšã§ãã
ããã«é¢ããæŽæ°ã¯ãããŸããïŒ ã¡ãŒãªã³ã°ãªã¹ãã®ã¹ã¬ããã«å¿çããããŸãã...
ããã«ã¡ã¯ãã¿ããªã
ãŸãã
-c foo.c
ãæå®ããã³ã³ãã€ã©ãããšã«ããdepfileã«çµ¶å¯Ÿãã¹ãçæããå¯èœæ§ããããŸãã
IAR v8ã®äŸåé¢ä¿ãã¡ã€ã«ã«ã¯ã絶察ãã¹ã®ã¿ãå«ãŸããŠããŸãã
CMake / Ninja / IARã§ã¢ãŠããªããœãŒã¹ãã«ããå®è¡ãããšããã®åé¡ãçºçããŸããCMakeã®ãã€ããªãã£ã¬ã¯ããªã§çµäºããçæãã¡ã€ã«ã¯ãNinjaãããã§ã¹ãã§ã¯çžå¯Ÿçã§ãããIARã«ãã£ãŠåºåãããdepsã¯çµ¶å¯Ÿçã§ãã
ç§ã«ãšã£ãŠãããã¯æããã«å¿è ã®åé¡ã§ããåããã¡ã€ã«ã«å¯ŸããŠ2ã€ã®ããŒããååšããã¹ãã§ã¯ãããŸããã
@bradkingã®ææ¡ãèªã¿ãŸããããã·ã³ããªãã¯ãªã³ã¯ã«é¢ããéšåãšgetcwd()
ã䜿çšã§ããªãçç±ãããç解ããŠããŸããã 詳ãã説æããŠããã ããŸãããã
ã·ã³ããªãã¯ãªã³ã¯ã®éšåãšã
getcwd()
ã䜿çšã§ããªãçç±ãããããããŸããã
@sebknzlåé¡ã¯ããžã§ãã¬ãŒã¿ã«ãã£ãŠbuild.ninja
ã«æžã蟌ãŸãã絶察ãã¹ã«ãäœããã®çç±ã§æå³çã«è§£æ±ºãããŠããªãã·ã³ããªãã¯ãªã³ã¯ãå«ãŸããŠããå¯èœæ§ãããããšã§ãã getcwd()
ã¯éåžžãã·ã³ããªãã¯ãªã³ã¯ã解決ããããã¹ãè¿ããŸãã Ninjaããã«ããããã§ã¹ãã®çžå¯Ÿãã¹ãŸãã¯getcwd()
ã«çžå¯Ÿçãªdepfileã解éããå ŽåãNinjaãæ§ç¯ãã絶察ãã¹ã¯ããã«ããããã§ã¹ããžã§ãã¬ãŒã¿ãŒã䜿çšãããã®ãšäžèŽããªãå¯èœæ§ãããã2ã€ã®ããŒãã«ãªããŸãã
ãªã³ã¯ããã¹ã¬ããã§ææ¡ããninja_workdir
ã¯ãåºæ¬çã«ããžã§ãã¬ãŒã¿ãŒãçžå¯Ÿãã¹ã®ããŒã¹ãšããŠäœ¿çšãããã®ãNinjaã«äŒããããšã§ãã å®éã«ã¯ã realpath(ninja_workdir) == realpath(getcwd())
ã¯åžžã«çã§ããå¿
èŠããããŸãããããã¯ninja_workdir == getcwd()
ãæå³ãããã®ã§ã¯ãããŸããã ãã1ã€ã®æ¹æ³ã¯ãNinjaãããŒããäœæããåã«ãã¹ãŠãrealpath
ããããšã§ãããããã¯$in
ããžã§ãã¬ãŒã¿ãŒã®æå³ãããšããã«æ¡åŒµãããªãããšãæå³ããŸãã
@jhasseãã®åé¡ãšããã«å¯ŸåŠããããã®ç§ã®ææ¡ãã芧ãã ããã
CMAKE_NINJA_GENERATOR_OPTION_ã«ãã£ãŠå¶åŸ¡ããã絶察ãã¹ã§_build.ninja_ãçæããŠã¿ãŸãããïŒ
ã€ãŸãããã®ããã«æ©èœããŸãïŒ
Claus-MBP:build clausklein$ cat build.ninja
# project dir
p = /Users/clausklein/Downloads
# object dir
o = /Users/clausklein/Downloads/.ninjatst.build
rule cp
command = cp $in $out
rule cc
depfile = $out.d
deps = gcc
command = cc -I$o -c $in -o $out -MD -MT $out -MF $out.d
# All absolute paths works
build all: phony $o/foo.o
# All absolute paths works
build $o/foo.h: cp $p/foo.h.in
IN = $p/foo.h.in
# All absolute paths works
build $o/foo.o: cc $p/foo.c || $o/foo.h
IN = "$p/foo.c"
default all
Claus-MBP:build clausklein$
ninjatst.bash.txtã§çæ
@ClausKlein絶察ãã¹ã䜿çšããããã«CMakeã«æããŠã¿ãŸããã https://github.com/ninja-build/ninja/issues/1251#issuecomment-282322776ã§ãªã³ã¯ãããã£ã¹ã«ãã·ã§ã³ãåç §ããŠãã ããã ãããå Žåãä¿®æ£ããä»ã®å Žåãå£ããããªå¥ã®æ¹æ³ã§ç©äºãè¡ãããšãããªãã·ã§ã³ãè¿œå ããããããŸããã
ãããé©åã«ä¿®æ£ããã«ã¯ã httpsïŒ //github.com/ninja-build/ninja/issues/1251#issuecomment-487618865ã§ãªã³ã¯ããææ¡ã®Ninjaæ©èœãæ¬åœã«å¿ èŠã§ãã
ããã
ãããªããmesonbuildã·ã¹ãã ã®ãã®ä¿®æ£ãå©çšã§ããŸãã;-)
åå12.03.2020um 12:56 schrieb Brad [email protected] ïŒ
@ClausKleinhttps ïŒ//github.com/ClausKlein絶察ãã¹ã䜿çšããããã«CMakeã«æããŠã¿ãŸããã ïŒ1251ïŒã³ã¡ã³ãïŒ https://github.com/ninja-build/ninja/issues/1251#issuecomment-282322776ã§ãªã³ã¯ãããã£ã¹ã«ãã·ã§ã³ãåç §ããŠãã ããã ãããå Žåãä¿®æ£ããä»ã®å Žåãå£ããããªå¥ã®æ¹æ³ã§ç©äºãè¡ãããšãããªãã·ã§ã³ãè¿œå ããããããŸããã
ãããé©åã«ä¿®æ£ããã«ã¯ãïŒ1251ïŒã³ã¡ã³ãïŒ https://github.com/ninja-build/ninja/issues/1251#issuecomment-487618865ã§ãªã³ã¯ããææ¡ã®Ninjaæ©èœãæ¬åœã«å¿ èŠã§ãã
â
ããªããèšåãããã®ã§ãããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHub https://github.com/ninja-build/ninja/issues/1251#issuecomment-598146822ã§è¡šç€ºãããã https ïŒ//github.com/notifications/unsubscribe-auth/AAN7QWWEDHMDA45DQVPLOUDRHDEVDANCNFSM4DBNL6GAã®ç»é²ã解é€ããŠãã ããã
å¿è
ãdepfileæ
å ±ã®ç
§åã«ninja_workdir
ã䜿çšããã·ã³ããªãã¯ãªã³ã¯ãåå ã§ninja_workdir != getcwd()
ã®ç¶æ³ãçºçãããšããŸãã ã³ã³ãã€ã©ãgetcwd()
ã䜿çšããŠçµ¶å¯Ÿãã¹ãåºåããããã«ãªã£ãå Žåã¯ã©ããªããŸããïŒ
ã³ã³ãã€ã©ã¯ãããããçžå¯Ÿãã¹ãšããŠæž¡ãããªãéãã getcwd()
ã䜿çšããªãã§ãã ãããçžå¯Ÿãã¹ãšããŠæž¡ãããå Žåã¯ããã«ãã·ã¹ãã ãžã§ãã¬ãŒã¿ã責任ãè² ãå¿
èŠããããŸãã
ãŸãã¯ã ninja_workdir
ãšgetcwd()
ã®äž¡æ¹ã§æ£èŠåããããšãæ€èšã§ããŸãã
ãŸããçžå¯Ÿãã¹ãäžãããããšããã³ã³ãã€ã©ã¯depfileã§çµ¶å¯Ÿãã¹ãè¿ããªãã¯ãã§ã;ïŒ
@ClausKlein絶察ãã¹ã䜿çšããããã«CMakeã«æããŠã¿ãŸããã ïŒ1251ïŒã³ã¡ã³ãïŒã§ãªã³ã¯ãããã£ã¹ã«ãã·ã§ã³ãåç §ããŠãã ããã ãããå Žåãä¿®æ£ããä»ã®å Žåãå£ããããªå¥ã®æ¹æ³ã§ç©äºãè¡ãããšãããªãã·ã§ã³ãè¿œå ããããããŸããã
@ClausKleinã«ãã£ãŠææ¡ãããããã«ã絶察ãã¹ã䜿çšãããšãã«æ£ç¢ºã«äœãå£ããŸãããïŒ
ã³ã³ãã€ã©ã«çµ¶å¯Ÿãã¹ãæå®ãããŠããå Žåãã³ã³ãã€ã©ãçæããdepfileã«ã¯çµ¶å¯Ÿãã¹ãããããã«ããããã§ã¹ãã®ããããŒãžã®çžå¯Ÿãã¹ïŒçæãããããããŒãªã©ïŒãšã¯èª¿æŽãããŸããã ãã®å·ã®åé ã«ããç§ã®æåã®æçš¿ã®ninja-bug.bash.txt
ãªã³ã¯ãåç
§ããŠãã ããã ããã¯äœãèµ·ãããã®æ®µéçãªäŸã瀺ããŠãããçŽç²ã«å¿è
ã®èŠ³ç¹ããè¡šçŸãããŠãããCMakeã¯ãããŸããã
èªãã ããšããããŸããã httpsïŒ //github.com/ninja-build/ninja/issues/1251#issuecomment -284533599ã䜿çšããŠã¿ãŸãããïŒ å¿è ã絶察çãªéããèœèãããããšããçç±ã ãã§ïŒ ãããããªããããã¯ããã¥ã¡ã³ãã®å€æŽã«ã€ããŠã§ããïŒ
build.ninja
ãã¡ã€ã«ã¯ãã©ãã§ã絶察ãã¹ãç¹°ãè¿ããªããŠãã¯ããã«å°ãããããé«éã«ãªããŸãã ãŸããèŠæ ããããããããã°ã容æã§ãã·ã§ã«ã§ã®ãã«ãã¿ãŒã²ããåã®ã¿ãè£å®ã«é©ããŠããŸãã IMOå¿è
ãäœãã®ã¯è¯ããå§ãã§ãã å¿è
ã¯ãã®äºä»¶ãå解ãããããã«ããå°ãæ
å ±ãå¿
èŠã§ãããããŠããã¯ç§ãææ¡ãããã®ã§ãã
@bradkingã®çžå¯Ÿãã¹ã¯å¿ ãããçããšã¯éããŸããã
build jsoncpp@sha/src_lib_json_json_reader.cpp.o: cpp_COMPILER ../../../../../Users/clausklein/Workspace/cpp/jsoncpp/src/lib_json/json_reader.cpp
DEPFILE = jsoncpp@sha/src_lib_json_json_reader.cpp.o.d
ARGS = -Ijsoncpp<strong i="7">@sha</strong> -I. -I../../../../../Users/clausklein/Workspace/cpp/jsoncpp -I../../../../../Users/clausklein/Workspace/cpp/jsoncpp/include -I../../../../../Users/clausklein/Workspace/cpp/jsoncpp/dir1 -I../../../../../Users/clausklein/Workspace/cpp/jsoncpp/dir2 -fdiagnostics-color=always -pipe -Wall -Winvalid-pch -Wnon-virtual-dtor -std=c++17 -O3
ç§ã®äŸhttps://github.com/ninja-build/ninja/issues/1251#issuecomment-597877775èŠæ ããè¯ãã§ãïŒ
CMakeã®ãžã§ãã¬ãŒã¿ãŒã«ã¯ããã«ãããªãŒãé¢ãã../
ã·ãŒã±ã³ã¹ã䜿çšããªããšããã«ãŒã«ããããŸãã å®å
šã«ãœãŒã¹å€ã®ãã«ãã§ã¯ããœãŒã¹ããªãŒãžã®çµ¶å¯Ÿãã¹ãšãã«ãããªãŒå
ã®çžå¯Ÿãã¹ã䜿çšããŸãã åŸè
ã¯ãã«ãããªãŒã®äžã«ããããã ../
ã§å§ãŸãããšã¯ãããŸããã
ç§ã¯ç¥ã£ãŠããŸããããã¯_mesonbuild_ã§çæãããŸããã ;-)
ãããããããããããœãŒã¹ããªãŒãžã®çæãæåŠããŠã¿ãŸãããïŒ
çžå¯Ÿãã¹ãšçµ¶å¯Ÿãã¹ã®ã¡ãªããã«ã€ããŠã¯ãæ°žé ã«è°è«ããããšãã§ããŸãã å¿è ã¯ããã«ã€ããŠæèŠãè¿°ã¹ãã¹ãã§ã¯ãããŸããã ããã§ã®åé¡ã¯ãäž¡æ¹ãåäžã®ãã«ãå ã§äœ¿çšãããå Žåã®èª¿æŽã§ãã ãã«ãã·ã¹ãã ãžã§ãã¬ãŒã¿ãŒã¯ãããŒã«ããã¹ãã©ã®ããã«åŠçããããåžžã«å¶åŸ¡ã§ãããšã¯éããŸããã Ninjaã¯ãåããã¡ã€ã«ãžã®çµ¶å¯Ÿãã¹ãšçžå¯Ÿãã¹ã®æ··åããµããŒãããå¿ èŠããããææ¡ã§æŠèª¬ããç°¡åãªã¢ãããŒãã§ãµããŒãã§ããŸãã ããæ°ãèµ·ãããããŠãŒã¹ã±ãŒã¹ã®å Žåãå€æŽã¯depfile解æã«åé¢ãããŸãã
Ninjaã¯ãåããã¡ã€ã«ãžã®çµ¶å¯Ÿãã¹ãšçžå¯Ÿãã¹ã®æ··åããµããŒãããå¿ èŠããããŸã
åæããŸãïŒ
ãã¹ãŠã®èª¬æãããããšããç§ã¯ç解ãå§ããŠããŸãã
NinjaãïŒdepfileã§çµ¶å¯Ÿãã¹ã«ééãããšãã«ïŒcwdãšãããèŠã€ãããã¹ã®äž¡æ¹ãrealpathãããšãããã©ãã§ããããïŒ æ¬¡ã«ãrealpatheddepfile-pathããrealpathedcwdãåé€ããŠãçæãããããããŒãšäžèŽããçžå¯Ÿãã¹ãååŸããŸãã ããã¯ããŸãããã§ããããïŒ
getcwd()
ã¯åžžã«ãªã¢ã«ãã¹ã§ãããããæé ã¯å¿
èŠãããŸããã Ninjaãrealpath()
ã®å ŽåãdepfileãæäŸãã絶察ãã¹ã䜿çšããŠãæ©èœããå¯èœæ§ã®ããcwdãã¬ãã£ãã¯ã¹ã確èªããŸãã ãã ãã realpath()
ã¯ããããé«äŸ¡ãªã·ã¹ãã ã³ãŒã«ã§ãããç§ã®ææ¡ããninja_workdir
ã¯ãæåååŠçãä»ããŠçŽç²ã«ã¡ã¢ãªå
ã®ãã¹ã調æŽã§ããŸãã
ä»ã®æ¹åãžã®æ··åãèš±å¯ããå¿
èŠããããŸãããã«ããããã§ã¹ãã§ã¯çµ¶å¯Ÿãã¹ã§ãããdepfileã§ã¯çžå¯Ÿãã¹ã§ãã å¿è
ãbuild.ninja
ã解æããŠããéããã¹ãŠã®çµ¶å¯Ÿãã¹ãrealpath()
ã«ããå¿
èŠã¯ãªããšæããŸãã ããã¯ããããé
ãã§ãããã
çµæã䜿çšããŠãworkdirã決å®ã§ããŸãã äŸãã°ïŒ
getcwdïŒïŒïŒ /var/xyz/build
depfileãšã³ããªïŒ /home/foo/build/bar.h
realpathïŒdepfileãšã³ããªïŒïŒ /var/xyz/build/bar.h
çžå¯Ÿãªã¢ã«ãã¹ïŒ bar.h
depfileãšã³ããªãããããåé€ããŸãïŒ /home/foo/build
-> ninja_workdir
ãã®ããã«ãrealpathã1ååŒã³åºãã ãã§æžã¿ãŸãã
äžè¬çã«ã ninja_workdir
èªåçã«å°åºããããšã¯äžå¯èœã ãšæããŸãã å
ã®ã·ã³ããªãã¯ãªã³ã¯ãå«ãè«çãã¹ã®è«çã³ã³ããŒãã³ããworkdirã«å¯Ÿå¿ããŠããããšãã©ã®ããã«ããŠç¥ãããšãã§ããŸããïŒ ãªã¢ã«ãã¹ãcwdãšäžèŽãããŸã§ãäžåºŠã«1ã€ã®ã³ã³ããŒãã³ããååŸããããšã§ãããå®è¡ã§ããå¯èœæ§ããããŸãããããã¯ããããŒã§ãšã©ãŒãçºçãããããšæããŸãã ãã®ããã«èŠããæåã®ã·ã³ããªãã¯ãªã³ã¯ãä¿¡é Œããã®ã¯å±éºã ãšæããŸãã ãŸãããã®æ¹æ³ã§è§£æ±ºãããŸã§ãééãããã¹ãŠã®çµ¶å¯Ÿãã¹ã§realpathïŒïŒãå®è¡ããå¿
èŠããããŸãã
ãã«ãã·ã¹ãã ãžã§ãã¬ãŒã¿ã¯ããã«ãã¹ããŒãã¡ã³ãããã³build.ninja
ã®ã³ãã³ãã©ã€ã³ã§çµ¶å¯Ÿãã¹ãçæãããšãã«äœ¿çšããworkdirãžã®è«çãã¹ãæ£ç¢ºã«èªèããŠããŸãã ãããã£ãŠãããã¯workdirãã¹ã®æãä¿¡é Œã§ããæ
å ±æºã§ãã ãã®æ
å ±ãå¿è
ã«äŒããæ¹æ³ãå¿
èŠãªã ããªã®ã§ãç§ãææ¡ããninja_workdir
ãã€ã³ãã£ã³ã°ã§ãã
ããããŸãããããããªããã ç§ã®æ€åºããžãã¯ãæ©èœããªãäŸãæããŠããã ããŸããïŒ
ãã«ãã·ã¹ãã ãžã§ãã¬ãŒã¿ãŒããã«ãããªãŒã®å åŽïŒãã«ãããªãŒã®å¥ã®å ŽæãŸãã¯å šäœã®å€åŽãæãïŒã«ã·ã³ããªãã¯ãªã³ã¯ãé 眮ãããšãç Žæããå¯èœæ§ããããŸãã
getcwdïŒïŒïŒ /var/xyz/build
depfileãšã³ããªïŒ /home/foo/build/subdir-link/bar.h
realpathïŒdepfileãšã³ããªïŒïŒ /var/xyz/build/subdir-real/bar.h
çžå¯Ÿãªã¢ã«ãã¹ïŒ subdir-real/bar.h
depfileãšã³ããªãããããåé€ããŸãïŒ???
CMakeã¯ãããè¡ããŸããããäžè¬çã«ãã«ãã·ã¹ãã ãžã§ãã¬ãŒã¿ãŒã¯ãããè¡ãããšãã§ããŸãã
ããããµããŒããããŠããªããšèšã£ãŠããæ€åºã¯æ¬¡ã®ããã«çŽé¢ããå¯èœæ§ããããŸãã
getcwdïŒïŒïŒ /var/xyz/build
1000åã®depfileãšã³ããªïŒ /home/foo/ext-lib/bar{1,2,...}.h
1000 realpathïŒdepfileãšã³ããªïŒïŒ /var/xyz/ext-lib/bar{1,2,...}.h
1000ã®çžå¯Ÿãªã¢ã«ãã¹ïŒcwdã®äžã«ãªã
ããã§ãããã1000ã®ãœãŒã¹ã®depfileã«è¡šç€ºãããããããçºçããªãããšãæ³åããŠãã ããã ããã¯ããã®ãã¥ãŒãªã¹ãã£ãã¯ã«äžèŽããªã100äžã®realpathïŒïŒåŒã³åºãã§ãã ãããŠãããã¯ãœãŒã¹ãåæ§ç¯ããããã®depfileãå解æããããã³ã«ç¹°ãè¿ãããŸãã
ãã«ãããªãŒå ã®ã·ã³ããªãã¯ãªã³ã¯->ã¯ãããããå®éã«ãµããŒãããããšã¯ã§ããŸããããšã«ãããä»ã®ããããçš®é¡ã®åé¡ãçºçããŸãïŒè³ãæã§å®éã«ãã¹ããå¿ èŠã¯ãããŸããïŒã
2çªç®ã®äŸã¯ããªã人工çã«èãããŸãã éåžžãdepfileã¯ãã·ã¹ãã ããããŒã§ã¯ãªããããŒã«ã«äŸåé¢ä¿ã§å§ãŸããŸãã
ãããæ¬åœã«ããã©ãŒãã³ã¹ã®åé¡ã§ããããšãå€æããå Žåãworkdirã.ninja_deps
ã«ãã£ãã·ã¥ã§ããŸããïŒ
ãœãŒã¹å€ã®ãã«ãã§ã¯ããã«ãããªãŒãæãdepfileãšã³ããªã¯ã»ãšãã©ãããŸããã ããã¯éåžžã«äžè¬çã§ãïŒ
getcwdïŒïŒïŒ /var/xyz/build
1000åã®depfileãšã³ããªïŒ/ home / foo / project-source / bar {1,2ã...}ãh
1000 realpathïŒdepfileãšã³ããªïŒïŒ/ var / xyz / project-source / bar {1,2ã...}ãh
1000ã®çžå¯Ÿãªã¢ã«ãã¹ïŒcwdã®äžã«ãªã
Ninjaã¯ãäžãäžã®å Žåã«åããŠãããããã¹ãŠã«å¯ŸããŠrealpath()
ãåŒã³åºãããå®éã®ã·ã¹ãã ã³ãŒã«ãåé¿ããããã«äœããã®çµæã®ããŒãã«ãç¶æããå¿
èŠããããŸãã cwdã«è§£æ±ºãããã·ã³ããªãã¯ãªã³ã¯ãã¹ã«ãã€ééããããäºåã«ç¥ãããšã¯ã§ããããããèŠã€ãããã©ããããããããŸããã
depfileã§çµ¶å¯Ÿãã¹ãšçŸå®ãã¹ãæ··åšãããããšãçŸåšæ©èœããŠããªãããšãèãããšããããã©ã®ããã«ãéåžžã«äžè¬çãã§ãããããããŸãããïŒ
ç§ã®äŸã®åœ¢åŒã®depfileã¯ãã·ã³ããªãã¯ãªã³ã¯ãæ··åãã¹ã䜿çšããŠããªãå Žåã§ãããã§ã«éåžžã«äžè¬çã§ãã ã»ãšãã©ã®ãã«ãããªãŒã«ãããããããŸãã å¿è
ã¯ãã¥ãŒãªã¹ãã£ãã¯ãå¿
èŠãã©ãããäºåã«ç¥ãããšãã§ããªããããäžãäžã®å Žåã«åããŠrealpath()
ã·ã¹ãã ã³ãŒã«ããããã¯ããå¿
èŠããããŸãã
å€åç§ã¯ããªãã®äŸã誀解ããŸããã 3000ãšã³ããªã®1ã€ã®depfileãæå³ããŸããããããšããããã1000ãšã³ããªã®depfileã®3ã€ã®å¥ã ã®äŸã§ãããïŒ
ã€ãŸãã1000åã®depfileãšã³ããªãä»»æã®æ°ã®depfileã«åæ£ããŠãããšããããšã§ãã ããã¯1ã€ã§ããå¯èœæ§ããããŸãã ããã¯ãããããããããããŸããã ãããžã§ã¯ãå šäœã§10000ã®ãšã³ããªãååšããå¯èœæ§ããããŸãã ãããã®ãã¹ã¯ãã¡ã€ã«ã·ã¹ãã äžã®ä»»æã®å Žæãæãããšãã§ããå®éã«ãã«ãããªãŒãæãå Žåãšããã§ãªãå ŽåããããŸãã
ãã¹ããã®ããã«æ··åšããçµæãšCMakeLists.txt
ã®äŸãæããŠãã ããïŒ1000ã§ããå¿
èŠã¯ãªãããããã1ã€ã ãã§ãïŒã
çŸåšãCMakeã¯ã»ãšãã©ã®å Žåããã¹ã®æ··åãåé¿ããããã«æ³šæããŠããããã CMakeLists.txt
ãã¡ã€ã«ã«è¡šç€ºããã®ã¯å°é£ã§ãã ãã ããCMakeã®èª²é¡è¿œè·¡ã·ã¹ãã ã«ã¯ãå¿è
ãæåã«ãããä¿®æ£ããªããšä¿®æ£ã§ããªãåé¡ã«é¢ããåé¡ããããŸãã ããšãã°ã CMake Issue13894ãåç
§ããŠãã ããã ãŠãŒã¶ãŒã¯ããã«ãããªãŒå
ã®ãœãŒã¹ïŒããã³ãããããã£ã¬ã¯ããªãå«ãïŒã«å¯ŸããŠãããŸãã¯ãœãŒã¹å
ãã«ããå®è¡ããå Žåã§ããã³ã³ãã€ã©ãžã®çµ¶å¯Ÿãã¹ãæå®ã§ããããšãæãã§ããŸãã ããã¯ãCMakeã®Makefileãžã§ãã¬ãŒã¿ãŒã§æ£åžžã«æ©èœããŸãã Ninjaã§ãããè¡ããšãdepfileã¯çµ¶å¯Ÿãã¹ã§è¿ããã build.ninja
ã®çžå¯Ÿãã¹ãšäžèŽããŸããã ãã¶ãããã¹ãŠã®çµ¶å¯Ÿãã¹ã«åãæ¿ããããšãã§ããŸãããããã§äžã§èª¬æããããã«ãããããå¿
èŠã¯ãããŸããã
ãããããããããã¹ãã«è©Šãããšãã§ããŸãhttps://github.com/ClausKlein/build-performance/commit/8013836486e3a459474eb374f6c3da5e20983443
ããã«ç€ºãããŠããåé¡ã¯ã httpsïŒ //github.com/ninja-build/ninja/issues/1251#issue-210080507ã«åºã¥ããŠããŸãã
ããã¯ããªããæãã ãå€ãã®ã¿ãŒã²ãããçæããŸãã ã€ãŸãããããã2ã€ã®ãœãŒã¹ãã¡ã€ã«ãæã€2ã€ã®ãµããã¥ãŒã¢ïŒ
PWD=/Users/clausklein/Workspace/build-performance/build
rule cp
command = cp $in $out
rule cc
depfile = $out.d
deps = gcc
command = gcc -c -I$PWD $IN -o $out $FLAGS -MMD -MT $out -MF $out.d
rule link
command = gcc -o $out $in $LINK_PATH $LINK_LIBRARIES
build foo: phony foo.h
build foo.h: cp foo.h.in
build bin/main0.o: cc /Users/clausklein/Workspace/build-performance/build/subdir0/main.c || foo.h
IN = /Users/clausklein/Workspace/build-performance/build/subdir0/main.c
build /Users/clausklein/Workspace/build-performance/build/subdir0/file0.o: cc /Users/clausklein/Workspace/build-performance/build/subdir0/file0.c || foo.h
IN = /Users/clausklein/Workspace/build-performance/build/subdir0/file0.c
build bin/main1.o: cc /Users/clausklein/Workspace/build-performance/build/subdir1/main.c || foo.h
IN = /Users/clausklein/Workspace/build-performance/build/subdir1/main.c
build /Users/clausklein/Workspace/build-performance/build/subdir1/file0.o: cc /Users/clausklein/Workspace/build-performance/build/subdir1/file0.c || foo.h
IN = /Users/clausklein/Workspace/build-performance/build/subdir1/file0.c
build bin/main0: link bin/main0.o /Users/clausklein/Workspace/build-performance/build/subdir0/file0.o
build bin/main1: link bin/main1.o /Users/clausklein/Workspace/build-performance/build/subdir1/file0.o
build all: phony foo bin/main0 bin/main1
default all
ããã¯ãCMakeã®Makefileãžã§ãã¬ãŒã¿ãŒã§æ£åžžã«æ©èœããŸãã
Makeã¯ã·ã³ããªãã¯ãªã³ã¯ã®åé¡ãã©ã®ããã«åŠçããŸããïŒ
Makeã¯ã·ã³ããªãã¯ãªã³ã¯ã®åé¡ãã©ã®ããã«åŠçããŸããïŒ
Makefileãžã§ãã¬ãŒã¿ãŒã¯çŸåšdepfileã䜿çšããŠããããç¬èªã®è¿äŒŒã¹ãã£ã³ãå®è¡ããŸãã ããã¯ãMakefileãžã§ãã¬ãŒã¿ãŒã«C ++ 20ã¢ãžã¥ãŒã«ã®ãµããŒããè¿œå ããäžç°ãšããŠæŽæ°ãããå¯èœæ§ããããŸãããã®æç¹ã§ãdepfileãã¹ã®è§£éã¯ãããã§ææ¡ãããŠãããã®ãšåæ§ã«èª¿æŽããå¿ èŠããããŸãã
1ã€ã®ãªãã·ã§ã³ã¯ãä»ã®ãšããninja_workdir
ãã¹ãããããå°ãªããšãgetcwd()
ãæäžäœã§ãããšæ³å®ããŠãæ··åãã¹ã調æŽããããã«Ninjaã«æããããšã§ãã ããããã°ãå°ãªããšãæ··åãã¹ã¯ãäžè¬çãªã·ã³ããªãã¯ãªã³ã¯ãªãã®å Žåã«æ©èœããŸãã 次ã«ã ninja_workdir
ãè¿œå ããŠãåŸã§ããè€éãªã±ãŒã¹ããµããŒãã§ããŸãã
誰ãããããä¿®æ£ããŠãã ããã ããã§ãšãŠãã€ã©ã€ã©ããŸãã
ç§ã¯CMakeãšVSCodeã§ARM-GCCã䜿çšããŠããŸãã ãœãŒã¹å ãã«ãã䜿çšãããšããã¹ã¯ïŒã«ãŒããã£ã¬ã¯ããªã§ã¯ãªãïŒããã«ãããã£ã¬ã¯ããªã«çžå¯Ÿçã§ãããããVSCodeã¯ãã¹ã解決ã§ããªããªããŸããã€ãŸããã¯ãªãã¯ããã ãã§ã¯äžååã§ãã代ããã«ãã³ãã³ãã©ã€ã³ãŠã£ã³ããŠã®ãã¹ãèªåã§æ€çŽ¢ããå¿ èŠããããŸãã CMakeã®ããªãŒå€ãã«ãã䜿çšãããšãEclipseã®ãIntelliSenseããå£ããCMakeãµããããžã§ã¯ãã§åé¡ãçºçããŸãã ä»ã®ãšããç§ã®è§£æ±ºçã¯ãããã©ã«ãã§çµ¶å¯Ÿãã¹ã䜿çšãããããMakeFilesã䜿çšããããšã§ãã ãã ããNinjaã®æ¹ãåªããŠãããèªã¿ããããã¡ã€ã«ïŒrules.ninja ...ïŒãçæãããã³ãã³ãã©ã€ã³ã§ã®ãã«ãåºåãåªããŠããŸãã Makeã«ã¯ããã«ãã¹ã¬ããã³ã³ããã¹ãã§ã³ãã³ãã©ã€ã³ã«èŠåãåºåããéã«ââåé¡ããããŸããã€ãŸããè€æ°ã®èŠåãã€ã³ã¿ãŒãªãŒããããŸãã ããã«ãããã·ã³ã°ã«ã¹ã¬ãããæ§ç¯ããããšã«ãªããŸããããããéåžžã«é¢åã§ãã
誰ãããããä¿®æ£ããŠãã ããã ããã§ãšãŠãã€ã©ã€ã©ããŸãã
ç§ã¯CMakeãšVSCodeã§ARM-GCCã䜿çšããŠããŸãã ãœãŒã¹å ãã«ãã䜿çšããå Žåããã¹ã¯ããã«ãããã£ã¬ã¯ããªããã®çžå¯Ÿãã¹ã§ã...
åé¿çããããŸãïŒãœãŒã¹ããªãŒã®å€åŽã®ãã«ããã£ã¬ã¯ããªãéžæããŠãã ããïŒ ã€ãŸãã_ $ TMPDIR /..._
ClausKleinã«æè¬ããŸãããåé¿çã¯ãœãŒã¹ãã«ãããå€ããŠããŸãããä»ã®ã¹ã¯ãªããã«ãã£ãŠåç §ãããŠãããããããªãŒå ã®ãã¡ã€ã«ãå¿ èŠã§ãã ãŸããããã¯éæšæºã®ãã«ãèŠä»¶ã§ãã
ä»ã®ãšããç§ã®è§£æ±ºçã¯ãCMakeãåžžã«çµ¶å¯Ÿãã¹ã䜿çšããããã«å€æŽããããšã§ãã ãªãããã®éžæè¢ããªãã®ãåãããŸããã ãã ããä»ã®èª°ãããããå¿ èŠãšããå Žåã¯ãCMakev3.18.1ã®ãããã次ã«ç€ºããŸãã
@@ -241,7 +241,7 @@ void cmNinjaTargetGenerator::AddIncludeFlags(std::string& languageFlags,
// Add include directory flags.
std::string includeFlags = this->LocalGenerator->GetIncludeFlags(
includes, this->GeneratorTarget, language,
- language == "RC", // full include paths for RC needed by cmcldeps
+ true, // full include paths for RC needed by cmcldeps
false, config);
if (this->GetGlobalGenerator()->IsGCCOnWindows()) {
std::replace(includeFlags.begin(), includeFlags.end(), '\\', '/');
@@ -1133,8 +1133,7 @@ void cmNinjaTargetGenerator::WriteObjectBuildStatement(
const std::string& fileConfig, bool firstForConfig)
{
std::string const language = source->GetLanguage();
- std::string const sourceFileName =
- language == "RC" ? source->GetFullPath() : this->GetSourceFilePath(source);
+ std::string const sourceFileName = source->GetFullPath();
std::string const objectDir = this->ConvertToNinjaPath(
cmStrCat(this->GeneratorTarget->GetSupportDirectory(),
this->GetGlobalGenerator()->ConfigDirectory(config)));
泚æãcmakeã®ãããããããŸãããã httpsïŒ//github.com/ninja-build/ninja/issues/1251ãåç §ããŠãã ããã
å¿è ã®ããããå¿ èŠã§ãïŒ
æåŸã®ã³ã¡ã³ãã§ãçžå¯Ÿãã¹ã®ä»£ããã«çµ¶å¯Ÿãã¹ã䜿çšããCMakeã®ãããã瀺ããŸããã ããã¯ãNinjaãšã®ã«ã¹ã¿ã CMakeããããŒã®äŸåé¢ä¿ãå£ãããïŒããšãã°ãçæãããããããŒãã¡ã€ã«ã¯.jsonãã¡ã€ã«ã«äŸåããŠããããïŒãæªãèãã§ããããšãããããŸãã ãã®åé¡ã¯ããã§ã®ãã®åé¡ã«ç±æ¥ãããšæããŸãããç§ã¯æããããŠç解ã§ããŸããã§ããã
誰ããããã«èå³ãæã£ãŠãããªããç§ã¯ä»ãçžå¯Ÿãã¹ã§å¿è ã䜿çšããŠããŸãã çµ±å端æ«å ã®çžå¯Ÿãã¹ãã¯ãªãã¯ã§ããããã«ãVSCodeã®æ¡åŒµæ©èœãäœæããŸããã æ¡å€§
@GrandChrisçŽ æŽãããïŒ Output
ã¿ãã§ãæ©èœããããã£ã³ã¹ã¯ãããŸããïŒ
@weliveindetail https://github.com/GrandChris/TerminalRelativePath/issuesã§æ°ããåé¡ãèªç±ã«äœæãããŠãŒã¹ã±ãŒã¹ã詳现ã«èª¬æããŠãã ããã ãã ããVSCodeã®[åºå]ã¿ãã®åäœã¯çµ±å端æ«ãšã¯ç°ãªãããã®ç¹ã§åäœãæ¡åŒµããAPIã¯ãªããšæããŸãã
ãããããé¡ãããŸãã æçµçã«ã¯ãã¯ãªãã¯å¯èœãªçžå¯Ÿãã¹ã¯ãããããVSCodeãŸãã¯CMakeæ¡åŒµæ©èœã§è§£æ±ºãããã¯ãã§ãã 圌ãã®åŽã§pingãå®è¡ããŸãã
åèãŸã§ã«ãããã¯CMake Issue21865ã§åã³åãäžããããŸããã ããã¯ãdepfileã§æ€åºãããäŸåé¢ä¿ã«build.ninja
ãšãŸã£ããåããã¹è¡šçŸã䜿çšãããã®ãç°¡åã§ã¯ãªãïŒå¯èœã§ããïŒïŒå Žåã®å¥ã®äŸã§ãã
ninja_workdir
ãã€ã³ãã£ã³ã°ãè¿œå ããŸãã ãããããŒãžããããããã®åé¡ã®ä¿®æ£ããã©ããŒã¢ããã§ããŸãã@jhasseãããã¢ããã¹ããªãŒã ã§ä¿®æ£ããããã®èš±å®¹å¯èœãªãœãªã¥ãŒã·ã§ã³ãèãåºãããã§ãã ninja_workdir
ã¯åé¡ã解決ããŸãã ç§ã¯äžèšã®ç§ã®ã±ãŒã¹ã䞻匵ããŸããã ä»ã«ã©ã®ãããªä»£æ¿æ¡ãææ¡ããŸããïŒ
ãææã®ãšãããåé¡ïŒdepfile絶察ãã¹ãšãããã§ã¹ãçžå¯Ÿãã¹ã®æ··åã¯åæ§ç¯ãäžæããŸãïŒã¯ä»æ§ã«ãããã®ã§ãã ãã£ã¹ã«ãã·ã§ã³ã§ããã€ãã®åé¡ã«è§Šããã®ã§ïŒãã«ããã£ã¬ã¯ããªã®ã·ã³ããªãã¯ãªã³ã¯ãªã©ïŒãããå ·äœçãªåé¡ãäœæããå¿ èŠããããšæããŸãã
æåã®ã³ã¡ã³ãã®2ã€ã®ãŠãŒã¹ã±ãŒã¹ã®å Žåãç§ã®ä»£æ¿æ¡ã¯æ¬¡ã®ããã«ãªããŸãã
ããã«ãããIDEããšã©ãŒã¡ãã»ãŒãžãšäžèŽããå ã®ãã¡ã€ã«ãåç §ããããã®ããè¯ãåºåãçæãããŸãã
IDEãä¿®æ£ãããã /FC
ãŸãã¯-fabs-path-diagnostics
ãã³ã³ãã€ã©ã«æž¡ããŸãã
ãŸãããããã°æ å ±ã«èšé²ããããã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
ãããã³ã³ãã€ã©ã§ä¿®æ£ããå¿
èŠããããŸãã -fdebug-prefix-map
ã確èªããããšããå§ãããŸãããåé¡ãæ£ç¢ºã«äœã§ãããã¯ããããŸããã
ãã®åé¡ã瀺ãã¹ã¯ãªããã¯æ¬¡ã®ãšããã§ãïŒninja-bug.bash.txt
å®éã«ã¯ãããã¯å¿è ã®çŸåšã®æ¯ãèãã瀺ããŠããŸãã 2ã€ã®åé¡
ããã«èª¬æãå¿ èŠã§ãã ããã§ãªããã°ãããã¯ç§ã«ã¯XYåé¡ã®ããã«èŠããŸãïŒXã¯ã絶察ãã¹ãšçžå¯Ÿãã¹ã®æ··åãã§ãããYã¯1ãŸãã¯2ã®ããããã§ãïŒã
ç§ã¯ã解決çããä»ã®ãã¹ãŠã®ããŒã«ã§ãããåé¿ãããããšã§ããã¹ãã§ã¯ãªããšæ¬åœã«æããŸãã
ninja_workdir
ã¢ãããŒãã«åºã¥ããããã¹ãã«ããå®å
šã«æ©èœããä¿®æ£ã瀺ããŠããŸãã ããã䜿çšãããžã§ãã¬ãŒã¿ãŒã¯ãäžèšã®ãã¹ãŠã®åé¡ã解決ã§ããŸããç§ããããããåé¿çãšã¯èŠãªããŠããªãããã§ãã
ããã¯GNUgccãªãã·ã§ã³ã§ã¯ãããŸããïŒ
Am 05.03.2021 um 16:58 schrieb Jan Niklas [email protected] ïŒ
IDEãä¿®æ£ãããã/ FChttps ïŒ//docs.microsoft.com/de-de/cpp/build/reference/fc-full-path-of-source-code-file-in-diagnosticsãŸãã¯-fabs-ãæž¡ããŸãã³ã³ãã€ã©ãžã®path-diagnosticshttps ïŒ//reviews.llvm.org/D23816 ã
ãŸãããããã°æ å ±ã«èšé²ããããã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
ãã®åé¡ã瀺ãã¹ã¯ãªããã¯æ¬¡ã®ãšããã§ãïŒninja-bug.bash.txt
å®éã«ã¯ãããã¯å¿è ã®çŸåšã®æ¯ãèãã瀺ããŠããŸãã
ããªããåŒçšããç§ã®æçš¿ã¯ããããçŸåšææžåãããŠããåäœã§ããããšãèªããŠããŸãã
ãã®åé¡ã®ç®çã¯ãèšèšãåé¡ã«ããããšã§ãã
圹ç«ããªããŠãŒã¹ã±ãŒã¹ã®ã¯ã©ã¹ã瀺ããŸãã
2ã€ã®åé¡...ïŒ1ïŒ...ïŒ2ïŒ...ããã«èª¬æãå¿ èŠã§ãã
ãããã¯ãã«ãã£ãŠè§£æ±ºã容æã«ãªãåé¡ã®2ã€ã®äŸã«ãããŸããã
絶察ãã¹ãããŒã«ã«æž¡ããŸãã 絶察ãã¹ã¯äžåçã§ã¯ãããŸãã
ãã®ãããªç¹å®ã®ã€ã³ã¹ã¿ã³ã¹ã§ä»ã®ãœãªã¥ãŒã·ã§ã³ãå©çšå¯èœã§ãããšããçç±ã ãã§
åé¡ïŒäžéšã®ãã³ããŒããå
¥æå¯èœãªããŒã«ã®ç¹å®ã®æ©èœã䜿çšïŒã
絶察ãã¹ã¯ãæŽæ°ãªãã§ãããã®åé¡ã®å€§èŠæš¡ãªã¯ã©ã¹ã解決ããã®ã«åœ¹ç«ã¡ãŸã
çæ
ç³»ã®æ®ãã®éšåã«ã 以åã«æçš¿ããããã«ïŒ
çžå¯Ÿãã¹ãšçµ¶å¯Ÿãã¹ã®ã¡ãªããã«ã€ããŠã¯ãæ°žé ã«è°è«ããããšãã§ããŸãã å¿è ã¯ãã¹ã
ããã«ã€ããŠã¯æèŠããããŸããã ããã§ã®åé¡ã¯ã次ã®ãããªå Žåã®èª¿æŽã§ãã
äž¡æ¹ãšãåäžã®ãã«ãå ã§äœ¿çšãããŸãã ãã«ãã·ã¹ãã ãžã§ãã¬ãŒã¿ã¯åžžã«
ããŒã«ããã¹ã§äœãããããå¶åŸ¡ããŸãã
è€éãªå®äžçã®ãã«ãã·ã¹ãã ã§ã¯ãä»»æã®æ°ã®ã¬ã€ã€ãŒãååšããå¯èœæ§ããããŸã
ã¹ã¯ãªãããã©ãããŒãããŒã«ãªã©ïŒããããçš®é¡ã®ãã³ããŒããïŒã®
ãã«ããã¡ã€ã«ãžã§ãã¬ãŒã¿ã«ãã£ãŠbuild.ninja
ã§æžã蟌ãŸãããã¹ãšå®éã®ãã¹
depfileã§å¿è
ãééããŸããã ç¹å®ã®ãã¡ã€ã«ãåç
§ã§ããå ŽåããããŸã
build.ninja
ããã®ãã¹ãçŽæ¥äžããããŠããªãããŒã«ããã®depfileã
depfilesãNinjaã®çŸåšã®èšèšã§æ©èœããããã«ãããŒã«å
šäœ
ã¹ã¿ãã¯ã¯ã build.ninja
ãžã§ãã¬ãŒã¿ãŒãã©ã®ããã«è¡šçŸããããæ£ç¢ºã«äŒããå¿
èŠããããŸã
ãã«ãã¹ããŒãã¡ã³ãã®ãããã®ãã¹ãããã³ããããä¿æãŸãã¯å€æããæ©èœããããŸã
åãããã«ãããã ããã¯äžè¬çã«æ±ãã«ããã§ãã
å¿è
ã¯å°ããªãã¶ã€ã³å€æŽã§ãã®åé¡ã解決ããããšãã§ããŸãïŒ
build.ninja
ã«çžå¯Ÿãã¹ãå«ãdepfileã®çµ¶å¯Ÿãã¹ïŒããã³ãã®éïŒ
éïŒã åããã¡ã€ã«ãžã®ä»»æã®ãã¹ã調æŽããããã«æ±ããŠããã®ã§ã¯ãªãã
depfileã®/path/to/some/file
ã¯ã®some/file
ãšåãã§ããããšãèªèããŠãã ãã
ãã«ããã¡ã€ã«/path/to/build.ninja
ã
ãã®ãããªèšèšæŽæ°ã®åäŸããããŸãã å¿è
ãæåã«å§ãŸã£ããšããåžæ
ãã¹ã¯åžžã«ãŸã£ããåãã§ninja
ãééãããšããããšã§ãã
ãã«ããã¡ã€ã«ãžã§ãã¬ãŒã¿ãæžã蟌ãã ãã€ãåäœã®è¡šçŸ
build.ninja
ã git blame -M -C -w -- src/util.cc
ãå®è¡ããå±¥æŽã確èªããŸã
CanonicalizePath
ã®
ãã¶ã€ã³å²åŠã¯ãªã©ãã¯ã¹ããªããã°ãªããŸããã§ããã ããã¯ãã®ãããªå Žåã®å¥ã®ã¯ã©ã¹ã§ãã
ç©äºã¯ç§ãåæããªããšããããšã§ã
å¿è ã¯ããã«ã€ããŠæèŠãè¿°ã¹ãã¹ãã§ã¯ãããŸããã
ããããã
ããã¯äžè¬çã«æ±ãã«ããã§ãã
ã§ã¯ãå ·äœçãªåé¡ã¯äœã§ããïŒ å°ãæ··ä¹±ããŠãã¿ãŸããã
ãããããNinjaã¯ããã«ã€ããŠæèŠãè¿°ã¹ãã¹ãã§ã¯ãªãããšããæèŠã«ã¯è³æã§ããŸããâŠã§ã¯ãå ·äœçãªåé¡ã¯äœã§ããïŒ
ããã¯ç¹å®ã®åé¡ã«é¢ãããã®ã§ã¯ãªãã絶察ãã¹ã䜿çšããŠè§£æ±ºããã®ãã¯ããã«ç°¡åãªåé¡ã®ã¯ã©ã¹å šäœã«é¢ãããã®ã§ãã éçºè ãããŒã«ã«çµ¶å¯Ÿãã¹ãæž¡ãããçç±ã¯é¢ä¿ãããŸãããç¹å®ã®ã±ãŒã¹ã«åœãŠã¯ãŸãçç±ãäœã§ããã絶察ãã¹ã䜿çšãããã ãã§ãã ãã«ãã·ã¹ãã ã¯ãããªã·ãŒãæ瀺ããããã§ã¯ãªãããŠãŒã¶ãŒã«ãµãŒãã¹ãæäŸããããã«ååšããŸãã Ninjaã¯ãã«ãã·ã¹ãã ã®ã¢ã»ã³ããªèšèªã§ãããšæ³å®ãããŠããŸãããæ··åã¹ã¿ã€ã«ã®ãã¹ã䜿çšããŠãã«ãã·ã¹ãã ãè¡šçŸããæ¹æ³ã¯ãããŸããã
Ninjaã®ã¢ããã¹ããªãŒã å€æŽã®ããªã·ãŒã§ã¯ãåé¡ãå¹çãæãªãããšãªã解決ã§ããå Žåã¯ãNinjaã¢ããã¹ããªãŒã ã§ã¯ãªãããã«ããã¡ã€ã«ãžã§ãã¬ãŒã¿ãŒã§åé¡ã解決ããå¿
èŠããããŸãã ãã®å Žåããã«ããã¡ã€ã«ãžã§ãã¬ãŒã¿ããã®depfileãã¹ã®æ±çšninja_workdir
ã¹ã¿ã€ã«ã®èª¿æŽãæäŸããå¯äžã®æ¹æ³ã¯ãdepfileãçæãããã¹ãŠã®ã³ãã³ãã®åŸã«ãäžèŽããããã«depfileå
ã®ãã¹ãä¿®æ£ããè¿œå ã®ã³ãã³ããæ¿å
¥ããããšã§ããå¿è
ãããŒãããåã®ãã«ããã¡ã€ã«ã ãã®è¿œå ã®ã³ãã³ãã«ã¯ãïŒ1924ãããã¯ããã«é«ãç¬èªã®ã©ã³ã¿ã€ã ã³ã¹ãããããŸãïŒ ninja
ããã»ã¹å
ã®å°æ°ã®è¿œå ã®ã¡ã¢ãªå
ã«ãã¯ã¢ããïŒã ãããã£ãŠãæ±çšã®èª¿æŽã¯ãäžæµã®å¿è
ã§æäŸããæ¹ãå¹ççã§ãããå«ããåè£ã§ãã
絶察ãã¹ãšçžå¯Ÿãã¹ãæ··åšãããã®ã§ã¯ãªãããã¹ãŠã«çµ¶å¯Ÿãã¹ã䜿çšããå Žåã§ãã人éå·¥åŠäžã®åä»ãªåé¡ããããŸãã ãŠãŒã¶ãŒãninja
ã«ãåœã®ã¿ãŒã²ããã§ã¯ãªãç¹å®ã®åºåãã¡ã€ã«ïŒããšãã°ã ninja out/my_executable
ãninja out/foo/bar.o
ïŒãåçæããããã«èŠæ±ããå Žåã絶察ãã¹ãŸãã¯å¿è
ãæž¡ãããšãå¿ããªãã§ãã ãããçŽãããããäžæãªã¿ãŒã²ããããšã©ãŒã§å€±æããŸãã éã®åé¡ãååšããŸããbuild.ninjaãã¡ã€ã«ãçžå¯Ÿãã¹ã䜿çšããŠããå ŽåããŠãŒã¶ãŒã¯ninjaã«çµ¶å¯Ÿãã¹ãåæ§ç¯ããããã«èŠæ±ããå¯èœæ§ããããŸãã
ç§ã管çããŠããNinjaãžã§ãã¬ãŒã¿ãŒããŒã«ã®1ã€ã§ã¯ããã¹ãŠã®build
ã¹ããŒãã¡ã³ãã«çžå¯Ÿãã¹ãšããã«å¯Ÿå¿ãã絶察ãã¹ã®äž¡æ¹ãåºåãšããŠå«ããããšã§ãããåé¿ããŠããŸãã ããã¯æ©èœããŸãããå¿è
ã®å¶éãåé¿ããã®ã¯æ¬åœã«ããã¯ã®ããã«æããŸãã ïŒç·šéïŒãŸããbuild.ninjaãçžå¯Ÿãã¹ã®ã¿ã䜿çšããå¥ã®çµ¶å¯Ÿãã¹ã«ç§»åããåŸãæ©èœããå Žåã¯ã絶察ãã¹ãšã€ãªã¢ã¹ãè¿œå ãããšãã®æ©èœãæãªãããŸããïŒ
確ãã«ãããã¯depfilesãšãŸã£ããåãåé¡ã§ã¯ãããŸããããNinjaã¯äžè¬çã«çµ¶å¯Ÿãã¹ãšçžå¯Ÿãã¹ã®åçæ§ãããããèªèããŠããå¿ èŠãããããšã瀺åããŠããŸãã
@comexããããšããããã¯æå¹ãªæžå¿µã§ãã ãã®ããã®æ°ããåé¡ãéãããšãã§ããŸããïŒ
éçºè ãããŒã«ã«çµ¶å¯Ÿãã¹ãæž¡ãããçç±ã¯é¢ä¿ãããŸãã[...]
åæããŸããã
ãã®å Žåãdepfileãã¹ã®æ±çš
ninja_workdir
ã¹ã¿ã€ã«ã®èª¿æŽãæäŸããå¯äžã®æ¹æ³[...]
ãããããªãninja_workdir
ã¹ã¿ã€ã«ã®èª¿æŽãå¿
èŠãªã®ã§ããïŒ
ãããããªãninja_workdirã¹ã¿ã€ã«ã®èª¿æŽãå¿ èŠãªã®ã§ããïŒ
ããã«ãããéçºè
ã¯ãå¶åŸ¡ããªãããŒã«ã«ãã£ãŠdepfileã§çæããã絶察ãã¹ãåŠçããªããã build.ninja
ã§çžå¯Ÿãã¹ã䜿çšã§ããŸãã ããããªããšãå¿è
ã®èšèšäžã®å¶éãšçµã¿åãããŠãã®ãããªããŒã«ã«å¯Ÿå¿ããããã«ã build.ninja
ã§çµ¶å¯Ÿãã¹ã䜿çšããããšãäœåãªããããå¯èœæ§ããããŸãã ç§ã®ææ¡ã¯ãçžå¯Ÿãã¹ã®äœ¿çšã劚ãããã®ã§ã¯ãããŸããã ããã¯ãããã®ããå€ãã®äœ¿çšãå¯èœã«ããŸãã
ïŒ1924ãšåã調æŽãå®è£
ããããã«ïŒ1925ãéããŸãããã ninja_workdir
ãã€ã³ãã£ã³ã°ã¯ãããŸããã ããã«ãããdepfileãã¹ã調æŽãããšãã決å®ãšãã·ã³ããªãã¯ãªã³ã¯ã䜿çšããŠè«çworkdirãã¹ããµããŒããããšãã決å®ãåé¢ãããŸãã
[...]å¶åŸ¡ããªãããŒã«ã«ãã£ãŠdepfilesã«çæããã絶察ãã¹ã
ãã®ãããªããŒã«ã®äŸã¯ãããŸããïŒ
äžçäžã®ãã¹ãŠã®äººã䜿çšãããã¹ãŠã®ããŒã«ã®åäœãäºæž¬ããããšã¯ã§ããŸããã ç§ãã¡ãå¶åŸ¡ããããŒã«ã«ã€ããŠãã絶察ãã¹ã§ç°¡åã«è§£æ±ºã§ããäžèšã®ããã€ãã®ã±ãŒã¹ã«ã€ããŠã¯ãã§ã«èª¬æããŸããããçžå¯Ÿãã¹ã§è§£æ±ºããã«ã¯ããŒã«åºæã®ãªãã·ã§ã³ãšçŽ°å¿ã®æ³šæãå¿ èŠã§ãã åæ§ã®çç±ã§ãCMakeã¯ããã€ãã®ã±ãŒã¹ã§çµ¶å¯Ÿãã¹ãåªå ããŸãã ä»ã®ãã¹ãŠã®ãžã§ãã¬ãŒã¿ãŒãå®è¡ããŠããã®ã«ãNinjaãžã§ãã¬ãŒã¿ãŒããããå®è¡ããŠããªããšãããã°ã¬ããŒããããã€ããããŸãã äŸåé¢ä¿ã®åé¡ã远跡ããã®ã«äœæéãè²»ãããŸããããããã¯ãã«ããããã§ã¹ããã¹ãšèª¿æŽãããŠããªãdepfileãã¹ã®å¥ã®ã€ã³ã¹ã¿ã³ã¹ã§ããããšãããããŸããã ããŒã«ã¯ãNinjaãäŸåé¢ä¿ããã£ããã£ããããã«å¿ èŠãªæ å ±ãæäŸããŸãããNinjaã¯ãããç¡èŠããŸãã
ããªãã®ç«å Žã¯ãçžå¯Ÿçãªéã¯æ®éçã«åªããŠãããšããæèŠãšããŠåºããããŸãã ä»ã®äººã ã¯ãå Žåã«ãã£ãŠã¯çµ¶å¯Ÿãã¹ã®æ¹ãåªããŠãããšããç°ãªãæèŠãæã£ãŠããŸãã çžå¯Ÿçãªãã¹ãäŒéããããã®ãã«ãããŒã«ã®å Žæã§ã¯ãªããšæããŸãã
ç§ã®ææ¡ã¯ãå¿è ã«å°éã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãè¿œå ããŸãã äœãçãã®ïŒ ãããæããªãããšã¯ãã¯ããã«å€§ããªã³ã¹ããå€éšåããŸãã
ã¯ããããã§ãïŒ
ãŸãã絶察ãã¹ã䜿çšãããšãcmakeã¯éè€ããã³ã³ãã€ã©ã€ã³ã¯ã«ãŒããã¹ãæé€ã§ããŸãã
ããã«ããããã«ãæéãåã³ççž®ãããŸãã
åå09.03.2021um 19:20 schrieb Brad [email protected] ïŒ
çžå¯Ÿçãªãã¹ãäŒéããããã®ãã«ãããŒã«ã®å Žæã§ã¯ãªããšæããŸãã
Qtã®ã¯ã€ãã¯ã³ã³ãã€ã©ã§çæãããcppãã¡ã€ã«ã§çŽé¢ããŠããåé¡ã«é¢ããŠãCMakeã®åé¡ãèšå®ãããŠããã£ãã«ããæå¹ã«ããŸããã ç§ã®å°å ã®èª¿æ»ã«ãããšãå¿è ã¯ã¯ããã«é«éãªãã«ãã·ã¹ãã ã§ããããã®æ座ã§ã¯ä¿¡é Œæ§ããããŸããã çŸåšãåé¿çãèŠã€ãããããã«ãæéã®å¢å ãæ£åœåããæ¹æ³ã®åé¡ã«çŽé¢ããŠããŸãã
CMakeã¯ãæè¿ãŸã§ãã®å¿è ã®åé¡ã«ãã£ãŠé ãããŠãã埪ç°äŸåã®åé¡ã«ééããŸããã ãã®åé¡ãä¿®æ£ãããŠããã°ãCMakeã®åé¡ããã£ãšæ©ãçºèŠã§ããã§ãããã
æãåèã«ãªãã³ã¡ã³ã
ç§ã¯ã解決çããä»ã®ãã¹ãŠã®ããŒã«ã§ãããåé¿ãããããšã§ããã¹ãã§ã¯ãªããšæ¬åœã«æããŸãã
1924ã¯ã
ninja_workdir
ã¢ãããŒãã«åºã¥ããããã¹ãã«ããå®å šã«æ©èœããä¿®æ£ã瀺ããŠããŸãã ããã䜿çšãããžã§ãã¬ãŒã¿ãŒã¯ãäžèšã®ãã¹ãŠã®åé¡ã解決ã§ããŸãã