Ninja: κΈ°λŠ₯ μš”μ²­: compdb λ„κ΅¬μ—μ„œ 보닀 μœ μ—°ν•œ κ·œμΉ™ 이름 일치

에 λ§Œλ“  2015λ…„ 09μ›” 20일  Β·  12μ½”λ©˜νŠΈ  Β·  좜처: ninja-build/ninja

ν˜„μž¬ compdb 도ꡬλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ μΏΌλ¦¬ν•˜λ €λŠ” κ·œμΉ™μ˜ μ •ν™•ν•œ 이름을 μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€. 이 이름이 예츑 κ°€λŠ₯ν•˜λ‹€λ©΄ μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜μ§€λ§Œ 일뢀 μƒμ„±κΈ°μ˜ 경우 λ°˜λ“œμ‹œ κ·Έλ ‡μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.

특히 버전 3.2μ—μ„œ CMake의 λ‹Œμž 생성기가 <lang>_COMPILER__<directory> ν˜•μ‹μ˜ κ·œμΉ™μ„ μƒμ„±ν•˜κΈ° μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€. 즉, 컴파일 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μΏΌλ¦¬ν•˜λ €λ©΄ λ¨Όμ € ν”„λ‘œμ νŠΈ 디렉토리 트리λ₯Ό μŠ€μΊ”ν•˜κ±°λ‚˜ λ‹€λ₯Έ 해킹에 μ˜μ‘΄ν•΄μ•Ό ν•©λ‹ˆλ‹€. 3.2 μ΄μ „μ˜ CMakeλŠ” <lang>_COMPILER ν˜•μ‹μ˜ κ·œμΉ™μ„ μƒμ„±ν•˜λ―€λ‘œ ν”„λ‘œμ νŠΈμ— λŒ€ν•œ νŠΉμ • 지식 없이 일반 λ„κ΅¬μ—μ„œ 쿼리할 수 μžˆμŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ 이 κΈ°λŠ₯ μš”μ²­μ€ λͺ…령쀄 μΈμˆ˜μ— λŒ€ν•΄ κ·œμΉ™ 이름을 보닀 μœ μ—°ν•˜κ²Œ μΌμΉ˜μ‹œν‚€κΈ° μœ„ν•œ κ²ƒμž…λ‹ˆλ‹€. μ΅œμ†Œν•œμœΌλ‘œ μœ μš©ν•œ κ΅¬ν˜„μ€ 접두사 μ „μš© 일치λ₯Ό ν—ˆμš©ν•©λ‹ˆλ‹€. λ˜λŠ” μ •κ·œμ‹ μΌμΉ˜λ„ μœ μš©ν•©λ‹ˆλ‹€.

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

λ‚˜λŠ” compdb 도ꡬλ₯Ό μ‚¬μš©ν•˜κΈ°κ°€ κ½€ μ–΄λ ΅λ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. -- μ €μ—κ²ŒλŠ” κ·œμΉ™ λͺ©λ‘μ΄ ν•„μš”ν•˜λ‹€λŠ” 것이 λ†€λžμŠ΅λ‹ˆλ‹€. λͺ…μ‹œμ μΈ κ·œμΉ™μ΄ λͺ…μ‹œμ μœΌλ‘œ μ „λ‹¬λ˜μ§€ μ•ŠμœΌλ©΄ "λͺ¨λ“  κ·œμΉ™"을 μ˜λ―Έν•  수 μžˆμŠ΅λ‹ˆκΉŒ? cmake 기반 λΉŒλ“œμ— μΆ©λΆ„ν• κΉŒμš”?

(κ΄€λ ¨ μ—†μŒ: 컴파일 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό 직접 μž‘μ„±ν•˜λ„λ‘ cmake에 CMAKE_EXPORT_COMPILE_COMMANDS λ₯Ό 전달할 수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.)

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

κ³Όκ±°μ—λŠ” λͺ¨λ“  κ·œμΉ™ λͺ©λ‘μ„ 인쇄할 수 μžˆλŠ” "κ·œμΉ™" 도ꡬ(7b67e48a1479c6fc7326c55756088bd57d64fc82)κ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. κ·Έ 도ꡬλ₯Ό μ‚¬μš©ν•˜λ©΄ λ‹€μŒκ³Ό 같은 μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ninja -t compdb `ninja -t rules | grep 'CXX_COMPILER_'`

μ…Έ μ™„μ„± 슀크립트λ₯Ό μž‘μ„±ν•˜λŠ” 데도 도움이 될 수 μžˆμœΌλ―€λ‘œ 이 도ꡬλ₯Ό λΆ€ν™œμ‹œν‚€λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” μ•žμœΌλ‘œ λ©°μΉ  μ•ˆμ— κ·Έλ ‡κ²Œ ν•˜λ €κ³  λ…Έλ ₯ν•  것이닀.

그것도 μž‘λ™ν•©λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€.

λ‚˜λŠ” compdb 도ꡬλ₯Ό μ‚¬μš©ν•˜κΈ°κ°€ κ½€ μ–΄λ ΅λ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. -- μ €μ—κ²ŒλŠ” κ·œμΉ™ λͺ©λ‘μ΄ ν•„μš”ν•˜λ‹€λŠ” 것이 λ†€λžμŠ΅λ‹ˆλ‹€. λͺ…μ‹œμ μΈ κ·œμΉ™μ΄ λͺ…μ‹œμ μœΌλ‘œ μ „λ‹¬λ˜μ§€ μ•ŠμœΌλ©΄ "λͺ¨λ“  κ·œμΉ™"을 μ˜λ―Έν•  수 μžˆμŠ΅λ‹ˆκΉŒ? cmake 기반 λΉŒλ“œμ— μΆ©λΆ„ν• κΉŒμš”?

(κ΄€λ ¨ μ—†μŒ: 컴파일 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό 직접 μž‘μ„±ν•˜λ„λ‘ cmake에 CMAKE_EXPORT_COMPILE_COMMANDS λ₯Ό 전달할 수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.)

여기에 μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ? πŸ™‚

κ·œμΉ™ 도ꡬ가 λΉŒλ“œμ—μ„œ 제거된 것 κ°™μŠ΅λ‹ˆκΉŒ?

이것은 정말 도움이 될 κ²ƒμž…λ‹ˆλ‹€.

기본적으둜 λͺ¨λ“  κ·œμΉ™μ„ 인쇄 ν•˜λΌλŠ” @nico 의 μ œμ•ˆμ΄ λ§ˆμŒμ—

μ—¬κΈ°μ„œ @sarcasm이 μ œμ•ˆν•œ ν•΄κ²° 방법은 λ‹€μ†Œ μΆ”μ•…ν•˜μ—¬ λ‹Œμž μžμ²΄μ—μ„œ 더 μ•„λ¦„λ‹€μš΄ μ†”λ£¨μ…˜μ— 동기λ₯Ό λΆ€μ—¬ν•©λ‹ˆλ‹€. :)

이제 기본적으둜 λͺ¨λ“  κ·œμΉ™μ„ λ€ν”„ν•˜λŠ” #1377이 μžˆμŠ΅λ‹ˆλ‹€.

여기에 μž‘μ€ λ©”λͺ¨λ₯Ό μΆ”κ°€ν•˜κ³  μ‹Άμ—ˆμ§€λ§Œ 일뢀 CMake ν”„λ‘œμ νŠΈ[0]의 경우 ninja -t compdb (인수 μ—†μŒ)λŠ” 아무 것도 λ€ν”„ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€(좜λ ₯은 빈 λͺ©λ‘ [] ).

cmake -G Ninja .
ninja -t compdb
[
]

κ·ΈλŸ¬λ‚˜ nicoκ°€ μ œμ•ˆν•œ λŒ€λ‘œ CMAKE_EXPORT_COMPILE_COMMANDS λ₯Ό μ‚¬μš©ν•˜λ©΄ λ‹€μŒμ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

cmake -G Ninja . -DCMAKE_EXPORT_COMPILE_COMMANDS=1
ninja -t compdb
[
]

ninja -t compdb μ—¬μ „νžˆ λΉ„μ–΄ μžˆμ§€λ§Œ compile_commands.json이 이미 μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

κ³ λ§ˆμ›Œ λ‹ˆμ½”!

[0] 적어도 Binaryen 의 경우

ninja --version 은(λŠ”) 무슨 λœ»μΈκ°€μš”?

1.8.2, btw 이 λ‹ŒμžλŠ” depot_tools μ—μ„œ

ν•΄λ‹Ή λ²„μ „μ—λŠ” #1377이 μ—†μŠ΅λ‹ˆλ‹€.

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