LLVMを利用するC言語のコンパイラ

オプション

無限にある
https://clang.llvm.org/docs/ClangCommandLineReference.html

  • --std=<version>
    • c23 とか c++23 とか(後者はclang++)
    • clang --std= a.c のように <version> を指定せずに --std オプションを渡してビルドしようとすると、利用可能なバージョンを確認できる
      • 他の方法ってないんですか?
      • --help にも man clang にも載っていないような気がする
  • -MJ <JSON file name>
    • compile_commands.json で使えるコンパイルコマンド情報を出力
      • 例えばこんな出力になる:{ "directory": "/tmp/tmp.Y71Bn3TacX", "file": "a.c", "output": "/tmp/a-b09d6e.o", "arguments": ["/usr/bin/clang-20", "-xc", "a.c", "-o", "/tmp/a-b09d6e.o", "-lm", "-dumpdir", "a-", "--target=x86_64-pc-linux-gnu"]},
    • printf '[%s]\n' "$(find build -name '*.json' -a -not -name 'compile_commands.json' | xargs cat | sed 's/,$//')" > build/compile_commands.json のようにすることで compile_commands.json が作れる
      • compile_commands.json は配列である必要があるので、JSONファイルを全部連結して、最後のカンマを削除し、 printf によって [] で囲む必要がある
      • これ一発でやる専用のコマンドとかないのかね
  • -MD
    • 依存しているヘッダファイルなどが記述された deps ファイルを生成してくれる
    • Makefileで -include hoge.deps することで、ヘッダが更新されたときにビルドし直すことができる
    • -MF <path> で出力先ファイルを指定できる