μ€κ΅μ΄ λ²μ μ Visual Studio 2010μΌλ‘ ninjaλ‘ chromiumμ λΉλ ν λ μ½μ μ°½μ μλ§μ ν¬ν¨ νμΌ μλ¦Όμ΄ μΆλ ₯λμ΄ λΉλ νλ‘μΈμ€κ° ν¬κ² λλ €μ§λλ€. ν΅μ§λ λ€μκ³Ό κ°μ΅λλ€.
注ζ οΌ ε ε« ζδ»Ά οΌ νμΌ κ²½λ‘ ν¬ν¨
μ΄μ μμνλ μμ΄λ λ€μκ³Ό κ°μ΅λλ€.
μ°Έκ³ : νμΌ ν¬ν¨ : .....
μλ§λ λμλ μμ΄ λ¨μ΄λ§μ κΈ°λ°μΌλ‘ ν¬ν¨ μλ¦Όμ μ κ±°νκ³ μμ κ²μ λλ€.
μμ΄ μ€μΉμμ "μ°Έκ³ : νμΌ ν¬ν¨ : % 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' : ε€γθΏγγͺγγγ°γγγΎγγ
κ΄λ ¨ κΈ°μ : https://bugzilla.mozilla.org/show_bug.cgi?id=587372
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 μ λμ¬μμλ μλν©λκΉ?
νλμ€μ΄ λ‘컬, ninja 1.8.2 λ° CMake 3.10.2λ₯Ό μ¬μ©νλ©΄ μ¬μ ν λ°μν©λλ€.
@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
μ΄λ² μ£Όμ νλ²ν΄λ³Ό κ²μ!
λΆννλ κ·Έκ²μ κ·Έκ²μ κ³ μΉμ§ λͺ»νμ΅λλ€.
λλ κ·Έ λΈλμΉμμ λμλ₯Ό λ§λ λ€μ κ·Έ λ²μ μ λμλ₯Ό μ¬μ©νμ¬ μ€μ€λ‘λ₯Ό λ€μ λΉλνμ§λ§ μ¬μ ν ν¬ν¨ λ©μμ§λ₯Ό ν°λ―Έλλ‘ μ μΆνμ΅λλ€.
μ¬κΈ°μ λ¬Έμ κ° 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).
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κ³Ό κ΄λ ¨μ΄ μμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
νλμ€μ΄ λ‘컬, ninja 1.8.2 λ° CMake 3.10.2λ₯Ό μ¬μ©νλ©΄ μ¬μ ν λ°μν©λλ€.