LoginSignup
1
0

More than 3 years have passed since last update.

LLVM のライブラリ群を cmake を使ってリンクさせる

Last updated at Posted at 2021-03-18

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}")

これにて完。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0