104 lines
3.4 KiB
Org Mode
104 lines
3.4 KiB
Org Mode
#+TITLE: :lang cc
|
|
|
|
This module adds support for the C-family of languages: C, C++, and Objective-C.
|
|
|
|
+ Code completion (~company-irony~)
|
|
+ eldoc support (~irony-eldoc~)
|
|
+ Syntax-checking (~flycheck-irony~)
|
|
+ Code navigation (~rtags~)
|
|
+ File Templates ([[../../feature/file-templates/templates/c-mode][c-mode]], [[../../feature/file-templates/templates/c++-mode][c++-mode]])
|
|
+ Snippets ([[https://github.com/hlissner/emacs-snippets/tree/master/cc-mode][cc-mode]], [[https://github.com/hlissner/emacs-snippets/tree/master/c-mode][c-mode]], [[https://github.com/hlissner/emacs-snippets/tree/master/c++-mode][c++-mode]])
|
|
+ Several improvements to C++11 indentation and syntax highlighting.
|
|
|
|
#+begin_quote
|
|
C contends with Haskell and Ruby for my favorite language. That said, it's more
|
|
accurate to say I write C, but a C++ feature or three.
|
|
|
|
The module provides nominal support for Objective-C, which I really only use to
|
|
inspect generated glue code for iOS mobile apps. Otherwise, I prefer Swift.
|
|
#+end_quote
|
|
|
|
* Table of Contents :TOC:
|
|
- [[#install][Install]]
|
|
- [[#irony-server][irony-server]]
|
|
- [[#rtags][rtags]]
|
|
- [[#configure][Configure]]
|
|
- [[#compile-settings][Compile settings]]
|
|
|
|
* Install
|
|
This module requires:
|
|
|
|
+ irony-server
|
|
+ rtags
|
|
|
|
** irony-server
|
|
Irony powers the code completion, eldoc and syntax checking systems.
|
|
|
|
*** MacOS
|
|
Due to linking issues, MacOS users must compile irony-server manually:
|
|
|
|
#+BEGIN_SRC sh :tangle (if (doom-system-os 'macos) "yes")
|
|
brew install cmake
|
|
brew install llvm # 1gb+ installation! May take a while!
|
|
|
|
git clone https://github.com/Sarcasm/irony-mode irony-mode
|
|
mkdir irony-mode/server/build
|
|
pushd irony-mode/server/build
|
|
|
|
DEST="$HOME/.emacs.d/.local/$(hostname)/etc/irony-server/"
|
|
cmake -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON \
|
|
-DCMAKE_INSTALL_PREFIX="$DEST" ../
|
|
cmake --build . --use-stderr --config Release --target install
|
|
|
|
install_name_tool -change @rpath/libclang.dylib \
|
|
/usr/local/opt/llvm/lib/libclang.dylib \
|
|
"$DEST/bin/irony-server"
|
|
|
|
# cleanup
|
|
popd
|
|
rm -rf irony-mode
|
|
#+END_SRC
|
|
|
|
*** Arch Linux
|
|
#+BEGIN_SRC sh :tangle (if (doom-system-os 'arch) "yes")
|
|
sudo pacman --needed --noconfirm -S clang cmake
|
|
#+END_SRC
|
|
|
|
Then run ~M-x irony-install-server~ in Emacs.
|
|
|
|
** rtags
|
|
Code navigation requires an [[https://github.com/Andersbakken/rtags][rtags]] server (~rdm~) installed and running. This
|
|
should be available through your OS's package manager.
|
|
|
|
This module will auto-start ~rdm~ when you open C/C++ buffers (so long as one
|
|
isn't already). If you prefer to run it yourself, outside of Emacs:
|
|
|
|
#+BEGIN_SRC sh
|
|
rdm &
|
|
rc -J $PROJECT_ROOT # loads PROJECT_ROOT's compile_commands.json
|
|
#+END_SRC
|
|
|
|
* Configure
|
|
** Compile settings
|
|
By default, a set of default compile settings are defined in
|
|
~+cc-default-compiler-options~ for C, C++ and Objective C. Irony, rtags and
|
|
flycheck will fall back to these.
|
|
|
|
To make these tools aware of project specific build settings, you need a JSON
|
|
[[https://sarcasm.github.io/notes/dev/compilation-database.html#ninja][compilation database]] present (i.e. a ~compile_commands.json~ file).
|
|
|
|
There are [[https://sarcasm.github.io/notes/dev/compilation-database.html][many ways to generate one]]. I use [[http://www.cmake.org/][CMake]] and [[https://github.com/rizsotto/Bear][bear]]:
|
|
|
|
#+BEGIN_SRC sh
|
|
# For CMake projects
|
|
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .
|
|
|
|
# For non-CMake projects
|
|
make clean
|
|
bear make
|
|
#+END_SRC
|
|
|
|
#+begin_quote
|
|
Use ~M-x +cc/reload-compile-db~ to reload your compile db in an already-open
|
|
C/C++/ObjC buffer.
|
|
#+end_quote
|