Ninja: 쀑ꡭ어 λ²„μ „μ˜ Visual Studio 2010으둜 λΉŒλ“œ ν•  λ•Œ λ§Žμ€ 포함 파일 μ•Œλ¦Ό

에 λ§Œλ“  2013λ…„ 07μ›” 05일  Β·  32μ½”λ©˜νŠΈ  Β·  좜처: ninja-build/ninja

쀑ꡭ어 λ²„μ „μ˜ Visual Studio 2010으둜 ninja둜 chromium을 λΉŒλ“œ ν•  λ•Œ μ½˜μ†” 창에 μˆ˜λ§Žμ€ 포함 파일 μ•Œλ¦Όμ΄ 좜λ ₯λ˜μ–΄ λΉŒλ“œ ν”„λ‘œμ„ΈμŠ€κ°€ 크게 λŠλ €μ§‘λ‹ˆλ‹€. ν†΅μ§€λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

注意 : εŒ…ε« ζ–‡δ»Ά : 파일 경둜 포함

이에 μƒμ‘ν•˜λŠ” μ˜μ–΄λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
μ°Έκ³  : 파일 포함 : .....

μ•„λ§ˆλ„ λ‹ŒμžλŠ” μ˜μ–΄ λ‹¨μ–΄λ§Œμ„ 기반으둜 포함 μ•Œλ¦Όμ„ μ œκ±°ν•˜κ³ μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

bug windows

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

ν”„λž‘μŠ€μ–΄ 둜컬, ninja 1.8.2 및 CMake 3.10.2λ₯Ό μ‚¬μš©ν•˜λ©΄ μ—¬μ „νžˆ λ°œμƒν•©λ‹ˆλ‹€.

λͺ¨λ“  32 λŒ“κΈ€

μ˜μ–΄ μ„€μΉ˜μ—μ„œ "μ°Έκ³  : 파일 포함 : % s % sn"은 VCbin1033clui.dll의 λ¬Έμžμ—΄ ν…Œμ΄λΈ”μ— λ¦¬μ†ŒμŠ€λ‘œ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

1033은 "μ˜μ–΄ (λ―Έκ΅­)"에 λŒ€ν•œ λ‘œμΌ€μΌ μ‹λ³„μžμž…λ‹ˆλ‹€.

λΆˆν–‰νžˆλ„ cl을 1033 λ‘œμΌ€μΌλ‘œ κ°•μ œν•˜λŠ” λͺ…λ Ή 쀄 μ˜΅μ…˜μ„ μ•Œμ§€ λͺ»ν•©λ‹ˆλ‹€. μ—¬λŸ¬ λ‘œμΌ€μΌμ΄ μ„€μΉ˜λœ 경우 μ‹œμŠ€ν…œ 섀정을 μ‚¬μš©ν•˜μ—¬ μ‚¬μš©ν•  ν•­λͺ©μ„ κ²°μ •ν•œλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ / showIncludes νŒŒμ„œμ˜ 접두사 검색에 λ‹€μ–‘ν•œ μ–Έμ–΄λ₯Ό μΆ”κ°€ν•΄μ•Όν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. : /

cmcldeps (이 좜λ ₯의 CMake νŒŒμ„œ)λŠ” "[^ :] + : [^ :] + : (. *)"와 같은 μ •κ·œμ‹μ„ μ‚¬μš©ν•˜μ—¬ showincludes 좜λ ₯처럼 λ³΄μ΄λŠ” λͺ¨λ“  좜λ ₯ 행을 κ°€μ Έμ˜΅λ‹ˆλ‹€. λ‚˜λŠ” κ²°κ΅­ 그런 것을 κ΅¬ν˜„ν•˜κ³  μ‹Άκ³  μ €μž‘κΆŒμ„ μΉ¨ν•΄ν•˜κ³  싢지 μ•ŠκΈ° λ•Œλ¬Έμ— μ½”λ“œλ₯Ό λ„ˆλ¬΄ μ„Έκ²Œ 보지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. :)

κΉŒλ‹€λ‘œμš΄ 뢀뢄은 ν˜Όλž€μŠ€λŸ½μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. showincludes 좜λ ₯κ³Ό κ²½κ³ κ°€ μžˆμŠ΅λ‹ˆλ‹€. sfcheng, κ²½κ³  λ˜λŠ” 였λ₯˜ λ©”μ‹œμ§€λ₯Ό ν‘œμ‹œ ν•  λ•Œ Visual Studio cl.exe의 쀑ꡭ어 좜λ ₯을 λΆ™μ—¬ 넣을 수 μžˆμŠ΅λ‹ˆκΉŒ?

그것은 ascii 58이 μ•„λ‹ˆλ―€λ‘œ 주름이 μΆ”κ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€. 였λ₯˜κ°€μžˆλŠ” 쀄 번호 "(d +)"κ°€ μœ μš©ν•œ μ‹ ν˜ΈμΌ 수 μžˆμŠ΅λ‹ˆλ‹€.

λΆˆν–‰νžˆλ„ cl을 1033 λ‘œμΌ€μΌλ‘œ κ°•μ œν•˜λŠ” λͺ…λ Ή 쀄 μ˜΅μ…˜μ„ μ•Œμ§€ λͺ»ν•©λ‹ˆλ‹€.

μ•ˆνƒ€κΉκ²Œλ„μ΄λ₯Ό μˆ˜ν–‰ ν•  μˆ˜μžˆλŠ” (κΉ¨λ—ν•œ) 방법은 μ—†μŠ΅λ‹ˆλ‹€. μ™Έκ΅­μ–΄ λ²„μ „μ˜ VSμ—λŠ” λ‹€λ₯Έ 번호 (예 : JA의 경우 1041)의 λ‹€λ₯Έ 둜캘 λ¦¬μ†ŒμŠ€κ°€ μžˆμŠ΅λ‹ˆλ‹€.
배운 λ‚΄μš© : 항상 EN λ²„μ „μ˜ VSλ₯Ό μ„€μΉ˜ν•˜κ³  ν•„μš”ν•œ 경우 μ–Έμ–΄ νŒ©μ„ μ„€μΉ˜ν•©λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ λ‹€ν–‰νžˆ "였λ₯˜ Cnnnn"및 "κ²½κ³  Cnnnn"은 ν˜„μ§€ν™”λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ μš°λ¦¬λŠ” 그것듀을 ν‚€λ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ @sgraham이 λ§ν–ˆλ“―μ΄ 쀄 λ²ˆν˜ΈλŠ” 'note :'좜λ ₯을 필터링 ν•  수 있기 λ•Œλ¬Έμ— 더 유망 ν•΄ λ³΄μž…λ‹ˆλ‹€.

λ‚˜λŠ” ν™•μ‹€ν•˜μ§€ μ•Šλ‹€ : are not ascii 58. 일본어 λ²„μ „μ—μ„œ 이것듀은 ν™•μ‹€νžˆ ascii 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' : 倀を返さγͺγ‘γ‚Œγ°γ„γ‘γΎγ›γ‚“

mozilla 버그와 μœ μ‚¬ν•œ 아이디어 : μ΅œμƒμœ„ var msvs_includes_prefix μžˆμ„ 수 있으며 μƒμ„±μžλŠ” / showIncludes둜 더미 #include "knownheader.h" νŒŒμΌμ„ μ»΄νŒŒμΌν•˜κ³  "knownheader.h μ•žμ—μžˆλŠ” λ‚΄μš©μ„ μž‘μ„±ν•˜μ—¬ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. "cl.exe 좜λ ₯μ—μ„œ ​​해당 μ΅œμƒμœ„ λ³€μˆ˜λ‘œ. NinjaλŠ” msvs_includes_prefixλ₯Ό / showIncludes μ ‘λ‘μ‚¬λ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

CMakeκ°€ κ΅¬μ„±ν•˜λŠ” λ™μ•ˆ 포함 μ ‘λ‘μ‚¬λŠ” ν•˜λ‚˜μ˜ 더미 λΉŒλ“œμ—μ„œ μ½μŠ΅λ‹ˆλ‹€.
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 좜λ ₯을 μ²˜λ¦¬ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

ninjaλŠ” λ˜ν•œ μΆ”κ°€ (μ „μ—­) 인수λ₯Ό ν—ˆμš©ν•΄μ•Όν•œλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.
(λ‹ˆμ½”κ°€ μ œμ•ˆν•œ κ²ƒμ²˜λŸΌ)

λ˜ν•œ CMakeλŠ” cmcldepsλ₯Ό μ‚¬μš©ν•˜μ—¬ 쒅속성 νŒŒμΌμ„ μƒμ„±ν•˜λŠ” cl둜 .rc νŒŒμΌμ„ λ¨Όμ € "컴파일"ν•œ λ‹€μŒ rc λ„κ΅¬λ‘œ μ²˜λ¦¬ν•˜μ—¬ .rc νŒŒμΌμ— λŒ€ν•œ 쒅속성을 μƒμ„±ν•©λ‹ˆλ‹€.
이것이 λ‹Œμžμ— μ–΄λ–»κ²Œ 톡합 될 수 μžˆλŠ”μ§€ ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

https://github.com/martine/ninja/pull/665

λΉ„ Ascii μ ‘λ‘μ‚¬μ—μ„œλ„ μž‘λ™ν•©λ‹ˆκΉŒ?

665κ°€ λ³‘ν•©λ©λ‹ˆλ‹€. κ·Έλž˜λ„ 인코딩 λ¬Έμ œμ— λŒ€ν•΄ μ•½κ°„ λ°˜λ³΅ν•΄μ•Ό ν•  μˆ˜λ„ μžˆμœΌλ―€λ‘œ μž‘λ™μ΄ 확인 될 λ•ŒκΉŒμ§€ μ—΄μ–΄ λ‘μ–΄μ•Όν•©λ‹ˆλ‹€.

ν”„λž‘μŠ€μ–΄ 둜컬, ninja 1.8.2 및 CMake 3.10.2λ₯Ό μ‚¬μš©ν•˜λ©΄ μ—¬μ „νžˆ λ°œμƒν•©λ‹ˆλ‹€.

665λŠ” msvc_deps_prefixλ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. cmakeκ°€ μ„€μ •ν•©λ‹ˆκΉŒ? νŠΈμœ— λ‹΄μ•„ κ°€κΈ°

@nico λ‚˜λŠ” 그것을 μ°Έμ‘°ν•˜λŠ” CMake의 μ½”λ“œλ₯Ό λ΄…λ‹ˆλ‹€.

Visual Studio Community 15.9.7μ—μ„œ 계속 λ°œμƒ ...

기둝을 μœ„ν•΄ 이것은 λ‹€μŒ κ΅¬μ„±μœΌλ‘œ μ—¬μ „νžˆ λ‚˜μ—κ²Œ λ°œμƒν•©λ‹ˆλ‹€.
CMake 3.14
Ninja 1.8.2 (Visual Studio 2019와 ν•¨κ»˜ μ œκ³΅λ˜λŠ” 버전)
ν”„λž‘μŠ€μ–΄ λ‘œμΌ€μΌ.

νŽΈμ§‘ : 더 λ‚˜μ€ ν•΄κ²° 방법 : ν™˜κ²½μ—μ„œ VSLANG=1033 λ₯Ό μ„€μ •ν•˜μ—¬ CL이 μ˜μ–΄ λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•˜λ„λ‘ν•©λ‹ˆλ‹€.

이전 ν•΄κ²° 방법 :
λ˜ν•œμ΄ 문제λ₯Ό κ²ͺ은 μ‚¬λžŒλ“€μ„ μœ„ν•΄ λ‚΄ ν•΄κ²° 방법은 $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

이번 주에 ν•œλ²ˆν•΄λ³Ό κ²Œμš”!

λΆˆν–‰νžˆλ„ 그것은 그것을 κ³ μΉ˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” κ·Έ λΈŒλžœμΉ˜μ—μ„œ λ‹Œμžλ₯Ό λ§Œλ“  λ‹€μŒ κ·Έ λ²„μ „μ˜ λ‹Œμžλ₯Ό μ‚¬μš©ν•˜μ—¬ 슀슀둜λ₯Ό λ‹€μ‹œ λΉŒλ“œν–ˆμ§€λ§Œ μ—¬μ „νžˆ 포함 λ©”μ‹œμ§€λ₯Ό ν„°λ―Έλ„λ‘œ μœ μΆœν–ˆμŠ΅λ‹ˆλ‹€.
image

여기에 λ¬Έμ œκ°€ 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 "";
}

μ•ˆλ…•ν•˜μ„Έμš”.

ν•¨μˆ˜μ˜ μƒλ‹¨μ—μžˆλŠ” μ˜μ–΄ 접두사λ₯Ό μ—‰λ§μœΌλ‘œ λ§Œλ“€κ³  μ‹ΆμŠ΅λ‹ˆκΉŒ?

ν•˜μ•„! 사싀 내일 그곳을 μ‚΄νŽ΄ 보렀고 ν–ˆμ–΄μš”. λ‚΄κ°€ 기회λ₯Ό κ°–κΈ° 전에 당신이 그것을 μž‘μ€ 것 κ°™μŠ΅λ‹ˆλ‹€.

λ°€μƒˆ 컴퓨터λ₯Ό μ’…λ£Œν–ˆμŠ΅λ‹ˆλ‹€. 내일 λ‹€μ‹œ 연락 λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€!

ν•˜μ§€λ§Œ deps_prefix μ—λŠ” rules.ninja νŒŒμΌμ— μ„€μ •λœ ν˜„μ§€ν™” 된 λ¬Έμžμ—΄μ΄ ν¬ν•¨λ˜μ–΄μ•Όν•©λ‹ˆλ‹€ (일반적으둜 CMakeμ—μ„œ 감지 및 μ„€μ •). μ—†λŠ” κ²½μš°μ—λ§Œ ν•˜λ“œ μ½”λ”© 된 것을 μ‚¬μš©ν•©λ‹ˆλ‹€.

λ‚˜λŠ” 그것이 μ‹€μ œ 범인이 될 μˆ˜μžˆλŠ” μ§ν›„μ˜ 논리λ₯Ό μ˜μ‹¬ν•œλ‹€. ν•˜μ§€λ§Œ λ§ν–ˆλ“―μ΄ 내일 μ μ ˆν•œ 쑰사 / 디버깅 μ„Έμ…˜μ„ μˆ˜ν–‰ ν•  κ²ƒμž…λ‹ˆλ‹€.

인코딩이 μΌμΉ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. deps_prefix λŠ” Latin-1 (콜둠 μ•žμ˜ NBSPλŠ” 0xA0 μž„)이고 line λŠ” μ–΄λ–€ 이유둜 CP437에 μžˆμŠ΅λ‹ˆλ‹€ (NBSP = 0xFF).
image

CL μžμ²΄κ°€ CP437을 좜λ ₯ν•œλ‹€κ³  μƒκ°ν•˜μ§€λ§Œ CMakeμ—μ„œ 생성 ν•œ rules.ninjaλŠ” Latin-1에 μžˆμŠ΅λ‹ˆλ‹€. CMake μΈ‘μ—μ„œ 일뢀 λ³€ν™˜μ΄ λ°œμƒν–ˆλ‹€κ³  μƒκ°ν•˜μ§€λ§Œ 더 λ§Žμ€ νŒŒκΈ°κ°€ ν•„μš”ν•©λ‹ˆλ‹€.

νŽΈμ§‘ : CL이 μ½˜μ†”μ˜ μ½”λ“œ νŽ˜μ΄μ§€κ°€ 무엇이든 좜λ ₯ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€. ( μ†ŒμŠ€ 1 , μ†ŒμŠ€ 2 ). λ‚˜λŠ” μš°λ¦¬κ°€ 그것을 λ‹€λ₯Έ κ²ƒμœΌλ‘œ κ°•μ œ ν•  μˆ˜μžˆλŠ” 방법을 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

μ•„λ§ˆλ„ μš°λ¦¬λŠ” λ‘˜ λ‹€ UTF-8 (λ˜λŠ” Ninjaκ°€ μ„ ν˜Έν•˜λŠ” 것)κ³Ό 같은 곡톡 μΈμ½”λ”©μœΌλ‘œ λ³€ν™˜ν•¨μœΌλ‘œμ¨ λ‘˜μ„ ν•¨κ»˜ κ°€μ Έμ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ CL 좜λ ₯μ—μ„œ MultiByteToWideChar(CP_OEMCP, ...) λ₯Ό ν˜ΈμΆœν•˜κ³  MultiByteToWideChar(1252, ...) rules.ninjaμ—μ„œ μ˜€λŠ” λ¬Έμžμ—΄μ—.

이것에 λŒ€ν•΄ 생각해 보면 ... 이것은 CMake의 잘λͺ» 일 수 μžˆμŠ΅λ‹ˆλ‹€. Windowsμ—μ„œ execute_process λͺ…령은 λͺ…λ Ήμ˜ 좜λ ₯을 λ‚΄λΆ€μ μœΌλ‘œ UTF-8둜 λ³€ν™˜ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€ (그리고 좜λ ₯의 인코딩을 μ§€μ •ν•˜κΈ° μœ„ν•΄ 선택적 ENCODING 맀개 λ³€μˆ˜λ₯Ό ν—ˆμš© 함). λ”°λΌμ„œ rules.ninja νŒŒμΌμ—μ„œ UTF-8둜 λ‹€μ‹œ κΈ°λ‘ν•©λ‹ˆλ‹€ (μ—¬κΈ°μ„œ NBSPλŠ” 0xFFκ°€ μ•„λ‹ˆλΌ 0xA0 μž„).

λ‚˜λŠ” λ³€κ²½ μ‹œλ„ CMAKE_DETERMINE_MSVC_SHOWINCLUDES_PREFIX μ‚¬μš©ν•˜μ—¬ ENCODING NONE (μ–΄λ–€ λ³€ν™˜μ„ μˆ˜ν–‰ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€)ν•˜μ§€λ§Œ, CMakeμ—μ„œ λͺ¨λ“  일을 κΉ° 것 κ°™μ•˜λ‹€.

κ·Έλž˜μ„œ μ œκ°€ μ§€κΈˆ κ°€μ§€κ³ μžˆλŠ” μ§ˆλ¬Έμ€ ... ninja의 msvc_deps_prefix κ°€ 컴파일러의 좜λ ₯κ³Ό λΉ„νŠΈ λ‹¨μœ„λ‘œ μΌμΉ˜ν•΄μ•Όν•˜λŠ”μ§€, μ•„λ‹ˆλ©΄ 파일이 μ˜ˆμƒλ˜λŠ” μ–΄λ–€ μΈμ½”λ”©μœΌλ‘œλ˜μ–΄ μžˆμ–΄μ•Όν•˜λŠ”μ§€,이 경우 Ninja의 κ²ƒμ΄μ–΄μ•Όν•©λ‹ˆλ‹€. 컴파일러 좜λ ₯μ—μ„œ β€‹β€‹μ μ ˆν•œ λ³€ν™˜μ„ μˆ˜ν–‰ν•˜λŠ” μž‘μ—…?

@bradking μ—¬κΈ° 인코딩 및 접두사 감지에 λŒ€ν•œ 생각?

μ—­μ‚¬μ μœΌλ‘œ ninjaλŠ” 인코딩이 λΆˆκ°€μ§€λ‘  μ μ΄μ—ˆμŠ΅λ‹ˆλ‹€ (인코딩이 '/'에 ASCII와 λ™μΌν•œ λ°”μ΄νŠΈλ₯Ό μ‚¬μš©ν•˜λŠ” ν•œ). κ·ΈλŸ¬λ‚˜ WindowsλŠ”μ΄λ₯Ό μ–΄λ ΅κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

Ninja의 CLParser::FilterShowIncludes λŠ” memcmp λ₯Ό μ‚¬μš©ν•˜μ—¬ msvc_deps_prefix λ₯Ό MSVC 좜λ ₯의 쀄과 λΉ„κ΅ν•˜λ―€λ‘œ μ‹€μ œλ‘œ 값은 λΉ„νŠΈ λ‹¨μœ„ 일치 μ—¬μ•Όν•©λ‹ˆλ‹€. CMakeλŠ”μ΄λ₯Ό λ³΄μ‘΄ν•˜κΈ° μœ„ν•΄ λͺ‡ 가지 μž‘μ—…μ΄ ν•„μš”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. CMakeλŠ” ν˜„μž¬ λ‚΄λΆ€μ μœΌλ‘œ UTF-8둜 λ³€ν™˜ν•˜λ―€λ‘œ build.ninja 값을 μ“Έ λ•Œ λˆ„λ½ 된 것은 μ½”λ“œ νŽ˜μ΄μ§€μ˜ μΈμ½”λ”©μœΌλ‘œ λ‹€μ‹œ λ³€ν™˜λ˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

IIRC, MSVC의 좜λ ₯ 인코딩은 ν™˜κ²½ λ³€μˆ˜ 및 / λ˜λŠ” ν”Œλž˜κ·Έμ˜ 영ν–₯을받을 수 μžˆμŠ΅λ‹ˆλ‹€. 즉, Ninjaκ°€ μž‘λ™ν•˜κ³  build.ninja λ¬Έμžμ—΄μ„ ν•΄μ„ν•˜λŠ” 데 μ‚¬μš©ν•˜λŠ” μ½”λ“œ νŽ˜μ΄μ§€μ™€ λ‹€λ₯Έ μΈμ½”λ”©μœΌλ‘œ 컴파일러 좜λ ₯으둜 끝날 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 경우 처리λ₯Ό μœ„ν•΄ Ninja의 μΆ”κ°€ 지원이 ν•„μš”ν•  수 μžˆμ§€λ§Œ μΆ”κ°€ 쑰사가 ν•„μš”ν•©λ‹ˆλ‹€.

CLμ—μ„œ μ‚¬μš©ν•˜λŠ” μ½”λ“œ νŽ˜μ΄μ§€μ— 영ν–₯을 λ―ΈμΉ˜λŠ” ν™˜κ²½ λ³€μˆ˜λ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” ν”„λ‘œμ„ΈμŠ€μ™€ κ΄€λ ¨λœ μ½”λ“œ νŽ˜μ΄μ§€λ₯Ό μ‚¬μš©ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€ (μ‹œμŠ€ν…œμ˜ 지역 섀정을 κΈ°λ°˜μœΌλ‘œν•˜κ±°λ‚˜ ν”„λ‘œμ„ΈμŠ€κ°€ ν•˜λ‚˜μ—μ„œ μ‹€ν–‰λ˜λŠ” 경우 μ½˜μ†” μ„€μ •).

κ·ΈλŸ¬λ‚˜ CLμ—μ„œ μ‚¬μš©ν•˜λŠ” μ–Έμ–΄λ₯Ό μ„€μ •ν•˜λŠ” ν™˜κ²½ λ³€μˆ˜ VSLANG 이 _is_ 있으며, μ΄λŠ”μ΄ λ²„κ·Έμ˜ 영ν–₯μ„λ°›λŠ” μ‚¬μš©μžλ₯Όμœ„ν•œ ν•΄κ²° λ°©λ²•μœΌλ‘œ 유용 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ninja νŒŒμΌμ„ μƒμ„±ν•˜κΈ° 전에 VSLANG=1033 λ₯Ό μ„€μ •ν•˜λ©΄ 버그가 λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μœ„μ˜ 주석을 λ‹€λ₯Έ λ‹¨μ–΄λ‘œ λ‹€μ‹œ λ§ν•˜λ©΄ : NinjaλŠ” μž…λ ₯ νŒŒμΌμ„ (μΈμ½”λ”©μ—†λŠ”) λ°”μ΄νŠΈλ‘œ μ·¨κΈ‰ν•˜κ³  μ΄λŸ¬ν•œ 문제λ₯Ό ν”Όν•˜κΈ° μœ„ν•΄ λ¬Έμžμ—΄μ˜ 인코딩 무지 λ°”μ΄νŠΈ 비ꡐλ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€. ninjaκ°€ ν”„λ‘œμ„ΈμŠ€ stdoutμ—μ„œ μ½λŠ” λ°”μ΄νŠΈμ™€ μΌμΉ˜ν•˜λ €λ©΄ build.ninja νŒŒμΌμ— λ‚˜νƒ€λ‚˜λŠ” λ°”μ΄νŠΈκ°€ ν•„μš”ν•˜μ§€λ§Œ ninjaλŠ” 인코딩에 λŒ€ν•΄ μ‹ κ²½ 쓰지 μ•ŠμŠ΅λ‹ˆλ‹€.

CMake λͺ¨λ“  λΉŒλ“œ νŒŒμΌμ„ 생성 ν•œ ν›„, λ‚˜λŠ” μˆ˜λ™μœΌλ‘œ λ³€ν™˜ rules.ninja UTF-8 μ„  포함에 msvc_deps_prefix = 注意: εŒ…ε«ζ–‡δ»Ά: , λ‹€μŒ 일듀이 κ³ μ •λ˜μ—ˆλ‹€. (이 νŒŒμΌμ€ κΈ°λ³Έ μ½”λ“œ νŽ˜μ΄μ§€ 936에 ν•΄λ‹Ήν•˜λŠ” GB2312 μΈμ½”λ”©μœΌλ‘œλ˜μ–΄μžˆμ—ˆμŠ΅λ‹ˆλ‹€.) CMakeκ°€ 항상 rules.ninja λ₯Ό UTF-8둜 λ³€ν™˜ν•˜λ„λ‘ λ³€κ²½ν•  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

μ½”λ“œ νŽ˜μ΄μ§€ 936 λ˜λŠ” 65001 μ΄μ™Έμ˜ λ‘œμΌ€μΌμ—μ„œ μž‘μ—… ν•œ κ²½ν—˜μ΄ μ—†μœΌλ―€λ‘œ μœ„μ˜ μ†”λ£¨μ…˜μ΄ λ²”μš© μˆ˜μ •μΈμ§€ μ—¬λΆ€λŠ” μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€.

λ™μΌν•œ 문제이며 CMAKE_CXX_FLAGSμ—μ„œ / W3 λŒ€μ‹  / W2λ₯Ό μΆ”κ°€ ν•˜μ—¬μ΄ 좜λ ₯을 μ§€μš°μ‹­μ‹œμ˜€.

이것은 # 1766κ³Ό 관련이 μžˆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰