Building Neovim - minsuk-jang/teamproject GitHub Wiki
- μ λ²μ μΌλ‘ μ κ·Έλ μ΄λνκΈ° μ μ ** λ€μ HEADλ₯Ό νμ νμΈνμμμ€. **
- Quick start
- Running tests
- Optimized builds
- Debug builds
- Localization
- Compiler options
- Xcode and MSVC project files
- Custom Makefile
- Third-party dependencies
- About CMake
- Build prerequisites
- λΉλ μ μ μ‘°κ±΄μ΄ μ€μΉλμ΄ μλμ§ νμΈνμμμ€.
- 볡μ
neovim / neovim
.- ** stable release ** :
git checkout v0.2.0
(λλ κ°μ₯ μ΅κ·Ό νκ·Έ)
- ** stable release ** :
- makeλ₯Ό μ€ννμ¬ Neovimμ λΉλνμμμ€. (BSD μμ€ν
μμλ
gmake
/ GNU Makeλ₯Ό μ¬μ©ν©λλ€.)
- ** μ¬μ©μ μ μ μμΉμ μ€μΉνλ €λ©΄ ** CMAKE_INSTALL_PREFIXλ₯Ό μ€μ νμμμ€ **. Neovim μ€μΉνκΈ°λ₯Ό μ°Έμ‘°νμμμ€.
κΈ°ν μ°Έκ³ μ¬ν :
- νμ¬ μ’
μμ± (libuv, LuaJIT λ±)μ μλμΌλ‘
.deps /
λ‘ λ€μ΄λ‘λ λ©λλ€. λ¬Έμ κ° μμ κ²½μ° FAQλ₯Ό μ°Έμ‘°νμμμ€. - λΉλνμ§ μκ³
Makefile
μ μμ±νλ €λ©΄ :make cmake
- Neovimμ κ°λ°νλ €λ κ²½μ° λΉ λ₯Έ λΉλλ₯Ό μν΄ ninjaλ₯Ό μ€μΉνμμμ€. μλμΌλ‘ μ¬μ©λ©λλ€.
μ΄μ μ’ μμ±μ νμΈ νμΌλ―λ‘ μλμμ μ€λͺ νλ λ€λ₯Έ λΉλ λμμ μλ ν μ μμ΅λλ€.
λͺ¨λ non-legacy (unit + functional) ν μ€νΈλ₯Ό μ€ννλ €λ©΄ λ€μμ μννμμμ€ :
LC_ALL=C make test
unit ν μ€νΈ λ§ μ€ννλ €λ©΄ λ€μμ μννμμμ€ :
LC_ALL=C make unittest
functional tests λ§ μ€ννλ €λ©΄ λ€μμ μννμμμ€ :
LC_ALL=C make functionaltest
fu λ§ μ€ννλ €λ©΄ * νΉμ * λ¨μ ν μ€νΈ: nctional tests λ₯Ό μ€ννμμμ€ :
TEST_FILE=test/unit/foo.lua make unittest
-
νΉμ * κΈ°λ₯ ν μ€νΈλ₯Ό μ€ννλ €λ©΄ λ€μμ μννμμμ€ :
TEST_FILE=test/functional/foo.lua make functionaltest
ν μ€νΈλ₯Ό μ¬λ¬ λ² λ°λ³΅νλ €λ©΄ λ€μμ μννμμμ€ :
.deps/usr/bin/busted --filter 'foo' --repeat 1000 test/functional/ui/foo_spec.lua
λͺ¨λ λ κ±°μ (Vim) ν΅ν© ν μ€νΈλ₯Ό μ€ννλ €λ©΄ λ€μμ μννμμμ€ :
make oldtest
-
λ¨μΌ * λ κ±°μ ν μ€νΈλ₯Ό μ€ννλ €λ©΄
TEST_FILE = test_name.res 'λ‘
make'λ₯Ό μ€ννμμμ€. μ :test_syntax.vim
μ μ€ννλ €λ©΄ :TEST_FILE=test_syntax.res make oldtest
-
.vm
λμ μ .res νμ₯μκ° νμν©λλ€. - μ 체 κ²½λ‘κ° μλ ν μ€νΈ νμΌ μ΄λ¦ λ§ μ§μ νμμμ€.
$ GDB
λ gdbserverμμ ν
μ€νΈ μ€νμΌλ‘ μ€μ ν μ μμ΅λλ€.
$ VALGRIND
λ μ€μ λλ©΄ gdbserverλ₯Ό μ§μ μμνμ§ μκ³ valgrindμ --vgdb = yes μ΅μ
μ μΆκ°ν©λλ€.
rm -r build
make clean
make CMAKE_BUILD_TYPE=Release
κ°λ°μμ "κ°μ₯μ리" μ¬μ©μμ κ²½μ°, RelWithDebInfo
λ λλ²κ·Έ μ 보λ₯Ό μμ±νμ§ μκΈ° λλ¬Έμ Release
λ³΄λ€ κΆμ₯λ©λλ€.
μ»΄νμΌ ν λΉλ μ νμ νμΈνλ €λ©΄ ./build/bin/nvim --version | grep ^ Build
λ₯Ό μ°Έμ‘°ν©λλ€.
nvimμ μΌλΆ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ μ μΌλ‘ λ§ν¬νκΈ° λλ¬Έμ μ΄λ¬ν ν¨μ μ€ μΌλΆλ₯Ό μ¬μ©ν μ μμΌλ €λ©΄ λλ²κ·Έ μ λ³΄λ‘ μ»΄νμΌν΄μΌ ν μλ μμ΅λλ€.
make distclean
VERBOSE=1 DEBUG=1 make deps
μΌλ° λΉλλbuild / src / nvim / po
μ.mo
νμΌμ λ§λλλ€.
*msgfmt : command not found
κ° νμλλ©΄ gettext
λ₯Ό μ€μΉν΄μΌ ν©λλ€.
λλΆλΆμ μμ€ν
μμ μ΄ ν¨ν€μ§λ gettext
λΌκ³ ν©λλ€.
$ LANG
μ λν λ²μμ νμΈνλ €λ©΄ make -C build check-po- $ LANG
μ μ€ννμμμ€. μ :
make -C build check-po-de
make -C build check-po-pt_BR
- ν΄λΉνλ κ²½μ°
make 'λμ
ninja`λ₯Ό μ¬μ©νμμμ€. -
check-po- $ LANG
μ./build/src/nvim/po/check- $ {LANG} .log
μ μμΈν λ³΄κ³ μλ₯Ό μμ±ν©λλ€. (λ³΄κ³ μλnvim
μ μν΄ μμ±λκ³msgfmt
μ μν΄ μμ±λμ§ μμ΅λλ€.)
src / nvim / po / $ LANG.po
νμΌμ μ΅μ λ¬Έμμ΄λ‘ μ
λ°μ΄νΈ νλ €λ©΄ λ€μμ μ€ννμμμ€ :
make -C build update-po-$LANG
- ν΄λΉλλ κ²½μ°
make 'λ₯Ό
ninja`λ‘ λ체νμμμ€. - **μ£Όμ : ** μ
λ°μ΄νΈ νμλ
src / nvim / po / cleanup.vim
μ μ€ννμμμ€.
includesμ 체μΈμ λ³΄λ €λ©΄ -H
μ΅μ
μ μ¬μ©νμμμ€. (# 918).
echo '#include "./src/nvim/buffer.h"' | \
> clang -I.deps/usr/include -Isrc -std=c99 -P -E -H - 2>&1 >/dev/null | \
> grep -v /usr/
-
grep -v / usr /
λ μμ€ν ν€λ νμΌμ κ±Έλ¬ λ΄κΈ° μν΄ μ¬μ©λ©λλ€. -
-save-temps
λ νμ₯ λ λ§€ν¬λ‘ λ μ£Όμ μ²λ¦¬ λ μ΄μ λΈλ¦¬λ₯Ό 보기 μν΄ μΆκ° λ μ μμ΅λλ€.
CMakeλ μ¬λ¬ κ°μ νλ‘μ νΈ νμΌ νμ μΌλ‘ λ΄λ³΄λ΄λ -G
μ΅μ
μ κ°μ§κ³ μμ΅λλ€.
(μ : Xcode λ° Visual Studio).
μλ₯Ό λ€μ΄ Xcodeμ μ μ λΆμ GUI (# 167)λ₯Ό μ¬μ©νλ €λ©΄ Neovim makefileμμ Xcode νλ‘μ νΈ νμΌμ μμ±ν΄μΌ ν©λλ€.
μ¬κΈ°μ neovim /
μ λ©μΈ Makefile
μ ν¬ν¨νλ μ΅μμ λ€μ€ λΉ μμ€ μ½λ λλ ν 리μ
λλ€) :
cmake -G Xcode neovim
κ·Έ ν Xcodeμμ κ²°κ³Ό νλ‘μ νΈ νμΌμ μ½λλ€.
λ©μΈ Makefile
맨 μμμ μ°Έμ‘°λλ local.mk
λ₯Ό μμ±νμ¬ λΉλ νλ‘μΈμ€λ₯Ό λ‘μ»¬λ‘ λ§λ€μ μμ΅λλ€.
.gitignore
μ λμ΄λμ΄ μμΌλ―λ‘ μ¬λ¬ λΈλμΉμμ μ¬μ©ν μ μμ΅λλ€.
**local.mk
μ μλ‘μ΄ λͺ©νλ κΈ°λ³Έ make-targetλ³΄λ€ μ°μ ν©λλ€. **
λ€μμ local.mk
μνλ‘ μ¬ κ΅¬μΆμ κ°μ νκΈ° μν νκ²μ μΆκ°νμ§λ§ default-targetμ μ€λ²λΌμ΄λνμ§λ μμ΅λλ€ :
all:
rebuild:
rm -rf build
make
# 1588μ μ°Έμ‘°νμμμ€.
CMakeλ₯Ό μ¬μ©νμ¬ "bundled" μμ‘΄μ±μ λΉλνλ €λ©΄ :
mkdir .deps ; cd .deps
cmake ../third-party
make
κΈ°λ³Έμ μΌλ‘ λΌμ΄λΈλ¬λ¦¬μ ν€λλ .deps / usr
μ μμ΅λλ€. μ΄μ λ€μ€ λΉμ λ§λ€ μ μμ΅λλ€.
mkdir build ; cd build
cmake ..
make
- λͺ¨λ μ’ μμ±μ μλμΌλ‘ μ€μΉνμμμ€.
- μ μ₯μ 루νΈμ
build
λλ ν 리λ₯Ό λ§λλλ€. - λͺ¨λ μ΅μ
κ³Ό νκ²½μ κ°μ§κ³
cmake ..
λ₯Ό μ€ννμμμ€. μ :CC=clang CFLAGS=" -O0 -g " cmake .. -DMIN_LOG_LEVEL=0 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$PWD/root -DCLANG_ASAN_UBSAN=ON
-
make
λ₯Ό μ€ννμμμ€.
- cmake.org
-
cmake -LAH
λ λͺ¨λ λ³μ μ μλ₯Ό μΆλ ₯ν©λλ€. -
build / CMakeCache.txt
λ CMakeκ° μ¬μ©νλ λͺ¨λ λ³μμ ν΄μ λ κ°μ ν¬ν¨ν©λλ€. -
build / compile_commands.json
λ κ° λ²μ λ¨μμ λν μμ ν μ»΄νμΌλ¬ νΈμΆμ 보μ¬μ€λλ€.
μΌλ°μ μΈ μꡬ μ¬ν (# 1469 μ°Έμ‘°) :
- μ΅κ·Ό λ²μ μ Clang λλ GCC λ²μ '4.4'μ΄μ
- CMake λ²μ
2.8.7
μ΄μ, TLS / SSL μ§μμΌλ‘ ꡬμΆ
νλ«νΌ λ³ μꡬ μ¬νμ λ€μκ³Ό κ°μ΅λλ€.
sudo apt-get install libtool libtool-bin autoconf automake cmake g++ pkg-config unzip
μ°Έκ³ :libtool-bin
μ Ubuntu 16.04 / Debian Jessie μ΄μμμλ§ νμν©λλ€.
CentOS / RHEL 6μ μ¬μ©νλ κ²½μ° libuv μμ‘΄μ± μ»΄νμΌνκΈ° μν΄μ μ΅μν autoconf λ²μ 2.69κ° νμν©λλ€. https://github.com/joyent/libuv/issues/1158μ μ°Έμ‘°νμμμ€.
sudo yum -y install libtool autoconf automake cmake gcc gcc-c++ make pkgconfig unzip
sudo zypper install libtool autoconf automake cmake gcc-c++ gettext-tools
sudo pacman -S base-devel cmake unzip
cd path/to/neovim
nix-shell '<nixpkgs>' -A neovim
patchPhase
cmakeConfigurePhase
buildPhase
installPhase
sudo pkg install cmake gmake libtool sha automake pkgconf unzip wget
sha256sum λΆμΌμΉμ κ΄ν μ€λ₯κ° λ°μνλ©΄
μ€μ sha256sumμ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
μ΄κ³ ,
μ΄κ²μ΄ λ¬Έμ μ
λλ€ (λΉ νμΌμ sha256sumμ
λλ€).
λν wgetμ΄ μ€μΉλμ΄ μλμ§ νμΈνμμμ€.
LuaRocksλ μ μ΄λ FreeBSDμμλ cURLκ³Όμ μνΈ μμ©μ΄ μ’μ§ μμΌλ©°
rockλ₯Ό μ€μΉνλ €κ³ ν λ LuaJITμ PANICκ³Ό ν¨κ» μ£½μ κ²μ
λλ€.
doas pkg_add gmake cmake libtool unzip autoconf-2.69p1 automake-1.15
export AUTOCONF_VERSION=2.69
export AUTOMAKE_VERSION=1.15
μΌλΆ μ 3 μ κ΅¬μ± μμ # 2445-commentλ‘ μΈν΄ μ΅μμ Makefileμ μ¬μ©ν λ λΉλκ° μ€ν¨νλ κ²½μ°κ° μμ΅λλ€. λ€μ μ§μΉ¨μ CMakeλ₯Ό μ¬μ©ν©λλ€.
mkdir .deps
cd .deps
cmake ../third-party/
gmake
cd ..
mkdir build
cd build
cmake ..
gmake
-
Xcode λͺ λ Ή ν λꡬ μ€μΉ
xcode-select --install
-
λ€λ₯Έ μ’ μμ± μ€μΉ :
Via MacPorts:
sudo port install libtool autoconf automake cmake pkgconfig gettext
Via Homebrew:
brew install libtool automake cmake pkg-config gettext
-
μ΄ νμ ν μ€νΈκ° μ€νλκΈ° μ μ
make distclean && make
λ₯Ό μ€νν΄μΌ ν μλ μμ΅λλ€. -
** wget μΈμ¦μ μ€λ₯ **κ° νμλλ κ²½μ° (OS X * μ΄μ λ²μ * 10.10 / Yosemite) :
Via MacPorts:
sudo port install curl-ca-bundle echo CA_CERTIFICATE=/opt/local/share/curl/curl-ca-bundle.crt >> ~/.wgetrc
Via Homebrew:
brew install curl-ca-bundle echo CA_CERTIFICATE=$(brew --prefix curl-ca-bundle)/share/ca-bundle.crt >> ~/.wgetrc
MSYS2 shellμμ μ΄ ν¨ν€μ§λ₯Ό μ€μΉνμμμ€ :
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-libtool mingw-w64-x86_64-cmake \
mingw-w64-x86_64-make mingw-w64-x86_64-perl mingw-w64-x86_64-python2 \
mingw-w64-x86_64-pkg-config mingw-w64-x86_64-unibilium gperf
μ΄μ Windows μ½μ (cmd.exe)μμ PATHλ₯Ό μ€μ νκ³ λΉλνμμμ€.
set PATH=%PATH%;c:\msys64\mingw64\bin
set CC=gcc
MinGW Makefiles
μμ±μλ₯Ό μ¬μ©νμ¬ λΉλνκΈ°
mkdir .deps
cd .deps
cmake -G "MinGW Makefiles" ..\third-party\
mingw32-make
cd ..
mkdir build
cd build
cmake -G "MinGW Makefiles" -DGPERF_PRG="C:\msys64\usr\bin\gperf.exe" ..
mingw32-make
32 λΉνΈ λΉλμ κ²½μ° ν¨ν€μ§ μ΄λ¦κ³Ό κ²½λ‘λ₯Ό μ μ ν μ‘°μ νμμμ€.