LLVM のライブラリはたくさんあります。
LLVM のライブラリをコンパイラに引数として渡すときにはたとえば
$ clang hello.c $(llvm-config --libs)
この llvm-config の展開だけするとこうなります。
$ llvm-config --libs
-lLLVMWindowsManifest 〜中略〜 -lLLVMDemangle
多すぎて書くのは省略しますが、とにかくいっぱい出ます。
ですので、これを cmake に反映させてみたいと思った時にいっぱいあるのを全部書き写す…。
なんてことをしていました。
cmake にすべてを書くのは面倒である
ので、なんとかならないかと思い調べていたところ下記のURLにヒントが有りました。
https://opensource.apple.com/source/clang/clang-703.0.29/src/projects/compiler-rt/CMakeLists.txt.auto.html
これを基に、書いてみると。
execute_process(COMMAND "llvm-config" "--libs"
OUTPUT_VARIABLE LLVM_LIBS)
string(REGEX REPLACE "[ \t]*[\r\n]+[ \t]*" "" LLVM_LIBS ${LLVM_LIBS})
これ、何をしているというと、
execute_process
でllvm-configを呼んでその返り値を LLVM_LIBS
に代入しています。
で、肝心なのは次の行です。コレがないと、cmake 時にエラーがでます。
" which has leading or trailing whitespace. This is now an error according
to policy CMP0004.
要するに文字列に余計な改行等が入っているので、ダメだよん、と言っているみたいです。
そこで
string
で文字列変換をしているわけです。
これで、無事cmake が通るようになりました。
あとはこの変数 LLVM_LIB_NAMES を setしてあげればOKなはずです。
set(STATIC_LLVM_LIBRARIES "${LLVM_LIBS}")
これにて完。