Visual Studio 2010ã®äžåœèªçã䜿çšããŠå¿è ã§ã¯ãã ããã«ããããšãã³ã³ãœãŒã«ãŠã£ã³ããŠã«å€§éã®ã€ã³ã¯ã«ãŒããã¡ã€ã«éç¥ãåºåãããããããã«ãããã»ã¹ãå€§å¹ ã«é ããªããŸãã éç¥ã¯æ¬¡ã®ãããªãã®ã§ãã
泚æïŒææžä»¶ïŒãã¡ã€ã«ãã¹ãå«ãã
è±èªã«çžåœãããã®ã¯æ¬¡ã®ãšããã§ãã
泚ïŒãã¡ã€ã«ãå«ãïŒ....ã
ããããå¿è ã¯è±èªã®åèªã ãã«åºã¥ããŠã€ã³ã¯ã«ãŒãéç¥ãåé€ããŠããŸãã
è±èªã®ã€ã³ã¹ããŒã«ã§ã¯ãã泚ïŒãã¡ã€ã«ãå«ãïŒïŒ sïŒ s \ nããVC \ bin \ 1033 \ clui.dllã®æååããŒãã«ã«ãªãœãŒã¹ãšããŠè¡šç€ºãããŸãã
1033ã¯ããè±èªïŒç±³åœïŒãã®ãã±ãŒã«èå¥åã§ãã
æ®å¿µãªãããclã1033ãã±ãŒã«ã«åŒ·å¶ããã³ãã³ãã©ã€ã³ãªãã·ã§ã³ãç¥ããŸããã è€æ°ã®ãã±ãŒã«ãã€ã³ã¹ããŒã«ãããŠããå Žåã¯ãã·ã¹ãã èšå®ã䜿çšããŠã©ã¡ãã䜿çšãããã決å®ãããšæããŸãã
ãããã£ãŠã/ showIncludesããŒãµãŒã®ãã¬ãã£ãã¯ã¹æ€çŽ¢ã«ããŸããŸãªèšèªãè¿œå ããå¿ èŠããããšæããŸãã ïŒ/
cmcldepsïŒãã®åºåã®CMakeããŒãµãŒïŒã¯ãã[^ïŒ] +ïŒ[^ïŒ] +ïŒïŒã*ïŒãã®ãããªæ£èŠè¡šçŸã䜿çšããŠãshowincludesåºåã®ããã«èŠãããã¹ãŠã®åºåè¡ãååŸãããšæããŸãã æçµçã«ã¯ãã®ãããªãã®ãå®è£ ããããšæã£ãŠãããèäœæš©ã䟵害ããããªãã®ã§ãã³ãŒããããŸã詳ãã調ã¹ãŠããŸããã :)
ããªãããŒãªéšåã¯ãshowincludesã®åºåãšèŠåãæ··åããªãããšã§ãã sfchengãèŠåãŸãã¯ãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããšãã«ãVisual Studio cl.exeã®äžåœèªã®åºåã貌ãä»ããããšãã§ããŸããïŒ
ã®ããã«èŠããŸãïŒASCII 58ã§ã¯ãªãã®ã§ããããè¿œå ãããå¯èœæ§ããããŸãã ãšã©ãŒã«ãªãå¯èœæ§ã®ããè¡çªå·ãïŒ\ d +ïŒãã¯ãæçšãªã·ã°ãã«ã§ããå¯èœæ§ããããŸãã
æ®å¿µãªãããclã1033ãã±ãŒã«ã«åŒ·å¶ããã³ãã³ãã©ã€ã³ãªãã·ã§ã³ãç¥ããŸããã
æ®å¿µãªããããããè¡ãïŒã¯ãªãŒã³ãªïŒæ¹æ³ã¯ãããŸããã VSã®å€åœèªããŒãžã§ã³ã«ã¯ãç°ãªãæ°ã®ä»ã®ãã±ãŒã«ãªãœãŒã¹ããããŸãïŒããšãã°ãJAã®å Žåã¯1041ïŒã
ç§ãã¡ãåŠãã ããšïŒåžžã«VSã®ENããŒãžã§ã³ãã€ã³ã¹ããŒã«ããå¿
èŠã«å¿ããŠèšèªããã¯ãã€ã³ã¹ããŒã«ããŸã:(
ãããã幞ããªããšã«ãããšã©ãŒCnnnnããšãèŠåCnnnnãã¯ããŒã«ã©ã€ãºãããŸããã ãããã£ãŠãããããããŒãšããŠäœ¿çšã§ããŸãã ãããã @ sgrahamãèšã£ãããã«ãè¡çªå·ã¯ 'noteïŒ'åºåãé€å€ããããšãã§ããã®ã§ãããææã«èŠããŸãã
ïŒãã¢ã¹ããŒ58ã§ã¯ãªããã©ããã¯ããããŸãããæ¥æ¬èªçã§ã¯ããããã¯ç¢ºãã«ã¢ã¹ããŒ58ã§ãã
FWIWãæ¥æ¬èªã®åºåã¯æ¬¡ã®ããã«ãªããŸãã
C:\cygwin\home\oku>type main.c
#include <stdio.h>
int nah(void){}; /* Trigger "function must return a value */
main(){return nah();}
C:\cygwin\home\oku>cl /showIncludes main.c
Microsoft(R) C/C++ Optimizing Compiler Version 16.00.40219.01 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
main.c
ã¡ã¢: ã€ã³ã¯ã«ãŒã ãã¡ã€ã«: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\stdio.h
ã¡ã¢: ã€ã³ã¯ã«ãŒã ãã¡ã€ã«: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\crtdefs.h
ã¡ã¢: ã€ã³ã¯ã«ãŒã ãã¡ã€ã«: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\sal.h
ã¡ã¢: ã€ã³ã¯ã«ãŒã ãã¡ã€ã«: c:\program files (x86)\microsoft visual studio10.0\vc\include\codeanalysis\sourceannotations.h
ã¡ã¢: ã€ã³ã¯ã«ãŒã ãã¡ã€ã«: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\vadefs.h
ã¡ã¢: ã€ã³ã¯ã«ãŒã ãã¡ã€ã«: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\swprintf.inl
c:\cygwin\home\oku\main.c(2) : warning C4716: 'nah' : å€ãè¿ããªããã°ãããŸãã
é¢é£ã¢ãŒãïŒ https ïŒ//bugzilla.mozilla.org/show_bug.cgiïŒid = 587372ïŒã¢ãããŒãïŒenv varãããã¬ãã£ãã¯ã¹ãèªã¿åããautoconfãã§ãã¯ãè¡ã£ãŠ/ showIncludesã®è§£æåäœã確èªããŸããããŸãè¯ããããŸãããïŒ
mozillaã®ãã°ã«äŒŒãã¢ã€ãã¢ïŒãããã¬ãã«ã®å€æ°msvs_includes_prefix
ãååšããå¯èœæ§ãããããžã§ãã¬ãŒã¿ãŒã¯/ showIncludesã䜿çšããŠãããŒã®#include "knownheader.h"
ãã¡ã€ã«ãã³ã³ãã€ã«ãããknownheader.hãã®åã«ãããã®ãæžã蟌ãããšã§ãããæžã蟌ãããšãã§ããŸãããã®ãããã¬ãã«å€æ°ãžã®cl.exeåºåã® "ã Ninjaã¯ãmsvs_includes_prefixã/ showIncludesãã¬ãã£ãã¯ã¹ãšããŠäœ¿çšããŸãã
CMakeãæ§æããŠããéãã€ã³ã¯ã«ãŒããã¬ãã£ãã¯ã¹ã¯1ã€ã®ãããŒãã«ãããèªã¿åãããŸãã
https://github.com/Kitware/CMake/blob/master/Modules/CMakeClDeps.cmake
æ£èŠè¡šçŸã䜿çšãããŠããå ŽåãåŸã§ãã¬ãã£ãã¯ã¹ãåŒæ°ãšããŠããŒã«ã«æž¡ãããŸãã
https://github.com/Kitware/CMake/blob/master/Source/cmcldeps.cxx
std :: string :: substrã¯ãcl.exeåºåã®åŠçã«äœ¿çšãããŸãã
å¿è
ãè¿œå ã®ïŒã°ããŒãã«ãªïŒè°è«ãåãå
¥ããå¿
èŠããããšæããŸãã
ïŒãã³ãææ¡ããããã«ïŒ
CMakeã¯ãŸããcmcldepsã䜿çšããŠãäŸåé¢ä¿ãã¡ã€ã«ãçæããclã䜿çšããŠ.rcãã¡ã€ã«ãæåã«ãã³ã³ãã€ã«ããã次ã«rcããŒã«ã§åŠçããããšã«ãã£ãŠ.rcãã¡ã€ã«ã®äŸåé¢ä¿ãçæããŸãã
ãããå¿è
ã«çµ±åã§ãããã©ããããŸãã¯ã©ã®ããã«çµ±åã§ãããã¯ããããŸããã
https://github.com/martine/ninja/pull/665
ããã¯éASCIIãã¬ãã£ãã¯ã¹ã§æ©èœããŸããïŒ
ãã©ã³ã¹ã®å°å ã®å¿è 1.8.2ãšCMake3.10.2ã§ããããã¯ãŸã èµ·ãããŸã...
@nicoCMakeã«ã³ãŒãããããŸãã
Visual Studio Community15.9.7ã§ãŸã çºçããŠããŸã...
ã¡ãªã¿ã«ãããã¯æ¬¡ã®æ§æã§ãŸã çºçããŠããŸãã
CMake 3.14
Ninja 1.8.2ïŒVisual Studio 2019ã«å梱ãããŠãããã®ïŒ
ãã©ã³ã¹èªã®ãã±ãŒã«ã
ç·šéïŒããè¯ãåé¿çïŒ CLã«è±èªã¡ãã»ãŒãžãåºåãããããã«ç°å¢ã«VSLANG=1033
ãèšå®ããŸãã
å€ãåé¿çïŒ
ãŸãããã®åé¡ã«ã¶ã€ãã£ã人ã®ããã«ãç§ã®åé¿çã¯$CMAKE_PATH\share\cmake-3.14\Modules\Platform\Windows-MSVC.cmake
ã®æ¬¡ã®è¡ãã³ã¡ã³ãã¢ãŠãããããš
#set(CMAKE_NINJA_DEPTYPE_${lang} msvc)
ïŒç§ã®368è¡ç®ïŒ
æ®å¿µãªãããããã«ããCMakeã¯depsè¡ãåé€ãã代ããã«deps = gcc
ãçæããŸãããããã¯ç§ã®ãã«ããå£ãããã«ã¯èŠããŸããã§ããã YMMVã ããã¯åé¿çã§ãã
deps = gcc
ãèšå®ããŠãã depfile
ãèšå®ããªããŠããããããåé¡ã¯ãããŸããã
@DrFrankensteinãã®PRãå¿è ã³ãŒãããŒã¹ã«é©çšããåŸããããåçŸããŠã¿ãŸãããïŒ https://github.com/ninja-build/ninja/pull/1671
ä»é±ã¯ãã£ãŠã¿ãŸãïŒ
æ®å¿µãªãããããã¯ãããä¿®æ£ããŸããã§ããã
ãã®ãã©ã³ãããå¿è
ããã«ããããã®ããŒãžã§ã³ã®å¿è
ã䜿çšããŠå床ãã«ãããŸããããããã§ãã€ã³ã¯ã«ãŒãã¡ãã»ãŒãžãã¿ãŒããã«ã«ãªãŒã¯ãããŸããã
ããã§ã®åé¡ã¯MSVCã€ã³ã¯ã«ãŒããã³ãã©ãŒã«ããããã«æãããŸãã
ãã®ããã®ææ³ã¯cl.exeããã®åºåãæ£ããèªèããŠããŸãããïŒ
äžæ...
ããŒãã³ãŒããããè±èªã®åé¡ã®ããã§ãã
https://github.com/ninja-build/ninja/blob/master/src/clparser.cc
string CLParser::FilterShowIncludes(const string& line,
const string& deps_prefix) {
const string kDepsPrefixEnglish = "Note: including file: ";
const char* in = line.c_str();
const char* end = in + line.size();
const string& prefix = deps_prefix.empty() ? kDepsPrefixEnglish : deps_prefix;
if (end - in > (int)prefix.size() &&
memcmp(in, prefix.c_str(), (int)prefix.size()) == 0) {
in += prefix.size();
while (*in == ' ')
++in;
return line.substr(in - line.c_str());
}
return "";
}
@DrFrankenstein
é¢æ°ã®äžéšã«ããè±èªã®æ¥é èŸãããã£ãŠãããããã£ãšããŸããããã©ããã確èªããããšæããŸããïŒ
ãïŒ ç§ã¯å®éã«ææ¥ãããèŠãã€ããã§ããã ç§ããã£ã³ã¹ãåŸãåã«ããªãããããæãŸããããã§ãã
ç§ã¯ã¡ããã©å€ã®ããã«ç§ã®ã³ã³ãã¥ãŒã¿ãã·ã£ããããŠã³ããŸããã ææ¥ãè¿äºããŸãïŒ
ãã ãã deps_prefix
ã¯ãrules.ninjaãã¡ã€ã«ïŒéåžžã¯CMakeã«ãã£ãŠæ€åºããã³èšå®ãããŸãïŒã§èšå®ãããŠããããŒã«ã©ã€ãºãããæååãå«ãŸããŠããå¿
èŠããããŸãã ååšããªãå Žåã«ã®ã¿ãããŒãã³ãŒãããããã®ã䜿çšããŸãã
ãããå®éã®ç¯äººã§ãããããããªãçŽåŸã®è«çãç§ã¯çãã ããããç§ãèšã£ãããã«ãç§ã¯ææ¥é©åãªèª¿æ»/ãããã°ã»ãã·ã§ã³ãè¡ããŸãã
ãšã³ã³ãŒãã£ã³ã°ãäžèŽããŸããã deps_prefix
ã¯Latin-1ïŒã³ãã³ã®åã®NBSPã¯0xA0ïŒã§ããã line
ã¯äœããã®çç±ã§CP437ã«ãããŸãïŒNBSP = 0xFFïŒã
CLèªäœãCP437ãåºåããŠãããšæããŸãããCMakeã§çæãããrules.ninjaã¯Latin-1ã§ãã CMakeåŽã§å€æãçºçãããšæããŸãããããã«æãäžããå¿ èŠããããŸãã
ç·šéïŒCLã¯ã³ã³ãœãŒã«ã®ã³ãŒãããŒãžãäœã§ããåºåããããã§ãã ïŒãœãŒã¹1 ããœãŒã¹2 ïŒã ã©ãããã°ãããä»ã®ãã®ã«ããããšãã§ããã®ãããããŸããã
ãããããCLåºåã§MultiByteToWideChar(CP_OEMCP, ...)
ãåŒã³åºãã MultiByteToWideChar(1252, ...)
åŒã³åºããªã©ããŠãäž¡æ¹ãUTF-8ïŒãŸãã¯Ninjaã䜿çšããããšã奜ããã®ïŒãªã©ã®äžè¬çãªãšã³ã³ãŒãã£ã³ã°ã«å€æããããšã§ã2ã€ããŸãšããããšãã§ããŸãã rules.ninjaããã®æååã
ãããæ¯ãè¿ã£ãŠ...ããã¯CMakeã®ãããããããŸããã Windowsã§ã¯ã execute_process
ã³ãã³ãã¯ã³ãã³ãã®åºåãå
éšã§UTF-8ã«å€æããããã§ãïŒåºåã®ãšã³ã³ãŒãã£ã³ã°ãæå®ããããã«ãªãã·ã§ã³ã®ENCODING
ãã©ã¡ãŒã¿ãŒãåãå
¥ããŸãïŒã ãããã£ãŠããããUTF-8ã®rules.ninjaãã¡ã€ã«ã«æžãæ»ããŸãïŒNBSPã¯0xA0ã§ããã0xFFã§ã¯ãããŸããïŒã
CMAKE_DETERMINE_MSVC_SHOWINCLUDES_PREFIX
ãENCODING NONE
CMAKE_DETERMINE_MSVC_SHOWINCLUDES_PREFIX
ã䜿çšããããã«å€æŽããããšããŸããïŒå€æãå®è¡ããŸããïŒããCMakeã®ããããçš®é¡ã®ãã®ãå£ããããã§ãã
ã ããç§ãä»æã£ãŠãã質åã¯...å¿è
ã®msvc_deps_prefix
ãã³ã³ãã€ã©ã®åºåã®ãããåäœã®äžèŽã§ãããããããšããã¡ã€ã«ãæåŸ
ããããšã³ã³ãŒãã£ã³ã°ã§ãããããã®å Žåã¯å¿è
ã®ã³ã³ãã€ã©åºåããé©åãªå€æãè¡ãããã®ä»äºïŒ
@bradkingããã§ãšã³ã³ãŒãã£ã³ã°ãšãã¬ãã£ãã¯ã¹æ€åºã«ã€ããŠèããŠããŸããïŒ
æŽå²çã«ãå¿è ã¯ãšã³ã³ãŒãã£ã³ã°ã«ãšããããŸããã§ããïŒãšã³ã³ãŒãã£ã³ã°ã '/'ã«ASCIIãšåããã€ãã䜿çšããŠããéãïŒã ãã ããWindowsã¯ãããå°é£ã«ããå¯èœæ§ããããŸãã
Ninjaã®CLParser::FilterShowIncludes
ã¯memcmp
ã䜿çšããŠmsvc_deps_prefix
ãMSVCã®åºåã®è¡ãšæ¯èŒããŠãããããå®éã«å€ã¯ãããåäœã§äžèŽããå¿
èŠããããŸãã CMakeã¯ãããç¶æããããã«ããã€ãã®äœæ¥ãå¿
èŠãªå ŽåããããŸãã CMakeã¯çŸåšå
éšã§UTF-8ã«å€æãããããããããäžè¶³ããŠããã®ã¯ãå€ãbuild.ninja
ã«æžã蟌ããšãã«ã³ãŒãããŒãžã®ãšã³ã³ãŒãã£ã³ã°ã«å€æãçŽãããšã ãã§ãã
IIRCãMSVCã®åºåãšã³ã³ãŒãã£ã³ã°ã¯ãç°å¢å€æ°ããã©ã°ã®åœ±é¿ãåããå¯èœæ§ããããŸãã ã€ãŸããNinjaãåäœãã build.ninja
æååã解éããããã«äœ¿çšããŠããã³ãŒãããŒãžãšã¯ç°ãªããšã³ã³ãŒãã£ã³ã°ã§ã³ã³ãã€ã©åºåãçæãããå¯èœæ§ããããŸãã ãã®ãããªå Žåã¯ãå¿è
ããã®è¿œå ã®ãµããŒããå¿
èŠã«ãªãå ŽåããããŸãããããã«èª¿æ»ããå¿
èŠããããŸãã
CLã䜿çšããã³ãŒãããŒãžã«åœ±é¿ãäžããç°å¢å€æ°ãèŠã€ãããŸããã§ããã ããã»ã¹ã«é¢é£ä»ããããã³ãŒãããŒãžïŒã·ã¹ãã ã®å°åèšå®ããŸãã¯ããã»ã¹ã1ã€ã§å®è¡ãããŠããå Žåã¯ã³ã³ãœãŒã«èšå®ã«åºã¥ãïŒã䜿çšããŠããã ãã ãšæããŸãã
ãã ããCLã§äœ¿çšãããèšèªVSLANG
ãèšå®ããç°å¢å€æ°ããããŸããããã¯ããã®ãã°ã®åœ±é¿ãåãããŠãŒã¶ãŒã®åé¿çãšããŠåœ¹ç«ã¡ãŸãã å¿è
ãã¡ã€ã«ãçæããåã«VSLANG=1033
èšå®ãããšããã°ã®çºçãé²ãããšãã§ããŸãã
äžèšã®ã³ã¡ã³ããå¥ã®èšèã§èšãæãããšãNinjaã¯å ¥åãã¡ã€ã«ãïŒãšã³ã³ãŒããªãã®ïŒãã€ããšããŠæ±ããæååã®ãšã³ã³ãŒãã«äŸåããªããã€ãæ¯èŒãè¡ã£ãŠããããã®åé¡ãåé¿ããããšããŸãã build.ninjaãã¡ã€ã«ã«è¡šç€ºããããã€ãã¯ãninjaãããã»ã¹stdoutããèªã¿åããã€ããšäžèŽããå¿ èŠããããŸãããninjaã¯ãšã³ã³ãŒããæ°ã«ããŸããã
CMakeããã¹ãŠã®ãã«ããã¡ã€ã«ãçæããåŸã rules.ninja
ãmsvc_deps_prefix = 泚æ: å
å«æ件:
è¡ãå«ãUTF-8ã«æåã§å€æãããšãããåé¡ãä¿®æ£ãããŸããã ïŒãã®ãã¡ã€ã«ã¯ãããã©ã«ãã®ã³ãŒãããŒãž936ã«å¯Ÿå¿ããGB2312ãšã³ã³ãŒãã£ã³ã°ã§ãããïŒCMakeã«å€æŽãå ããŠãåžžã«rules.ninja
ãUTF-8ã«å€æã§ãããšæããŸããïŒ
ã³ãŒãããŒãž936ãŸãã¯65001以å€ã®ãã±ãŒã«ã§ã®äœæ¥çµéšã¯ãªãã®ã§ãäžèšã®è§£æ±ºçãæ®éçãªä¿®æ£ã§ãããã©ããã¯ããããŸããã
åãåé¡ããããCMAKE_CXX_FLAGSã§/ W3ã®ä»£ããã«/ W2ãè¿œå ããŠãã®åºåãæ¶å»ããããšãã§ããŸã
ããã¯ïŒ1766ã«é¢é£ããŠããŸã
æãåèã«ãªãã³ã¡ã³ã
ãã©ã³ã¹ã®å°å ã®å¿è 1.8.2ãšCMake3.10.2ã§ããããã¯ãŸã èµ·ãããŸã...