1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

clangのconfigでコンパイルオプションを指定する

Last updated at Posted at 2025-03-01

Clangではコンパイルオプションをconfigファイルから読み込むことができるそうなので、macOS環境で試してみました。

Clangのconfigファイルとは

Clangのconfigファイルとは、コンパイルオプションを指定するための設定ファイルのことです。例えば、ある特定のターゲットに対してのコンパイルオプションを事前に設定しておいて、コンパイル時に指定するときなどに役立ちます。Clang Compiler User's Manual1には、例として-L-I-l--sysrootcodegenなどコンパイル環境依存で設定されるようなオプションが挙げられています。

設定例

--configオプションによる指定

--configオプションで直接指定する方法です。これが最も一般的だと思います。

$ clang++ --config=a.cfg a.cpp

configファイルにはオプションをそのまま指定します。

a.cfg
-std=c++23

例として、C++23のフィーチャー(std::print2)のために-std=c++23オプションをa.cfg(ファイル名は任意)で指定することができました。

a.cpp
#include <print>

int main() {
  std::print("{}\n", "print"); 
  return 0;
}

オプションは追記して指定することもできます。

a.cfg
-std=c++23
-Wall

また、複数のconfigファイルを読み込ませることもできます。

$ clang++ --config=x.cfg --config=y.cfg a.cpp

デフォルト

デフォルトで参照されるconfigがあるかどうかは、環境依存かと思いますが、筆者の環境でインストールされているClang(Homebrew clang version 19.1.7)では、/opt/homebrew/etc/clang/arm64-apple-darwin24.cfgが参照されるようになっていました。
このファイルに追記すると、オプションを明示的に指定しなくとも読み込まれるようになります。
ただし、デフォルトのconfigファイルには--isysrootなどシステムライブラリに必要なオプションが設定されていることもあるので、あまり不用意に変更しないほうが良さそうです。

$ clang -v
Homebrew clang version 19.1.7
Target: arm64-apple-darwin24.1.0
Thread model: posix
InstalledDir: /opt/homebrew/Cellar/llvm/19.1.7_1/bin
Configuration file: /opt/homebrew/etc/clang/arm64-apple-darwin24.cfg

--config-user-dir, --config-system-dirでデフォルト参照先を変更する

コンパイル時に--config-user-dir--config-system-dirというオプションを使用することで、userとsystemのデフォルトのconfigディレクトリを変更することができます。上の例での/opt/homebrew/etc/clangにあるconfigファイルを探索する代わりに、このオプションで設定したディレクトリを探索することになります。
Clang Compiler User's Manual1によると、--config-system-dir--config-user-dirオプションは指定されたディレクトリを探索して、<triple>-<driver>.cfgという名称のconfigファイルがあれば、それが使われます。(詳しい探索規則は、上記のマニュアルを参照していただければと思います。)

筆者が調べたところの注意点としては、以下がありました。

  • 読み込まれるconfigファイルは1つだけ
  • 探索規則に沿っていないファイル名(a.cfgなど)は指定ディレクトリ下に存在していても読み込まれない
  • このオプションを指定すると、デフォルトのconfigは参照されなくなる

例えば、下記の例では2種類の.cfgファイルのうち、arm64-apple-darwin24-clang++.cfgが優先的に読み込まれます。1ファイルしか読み込まれないので、arm64-apple-darwin24.cfgは読み込まれません。

$ ls <path_to_config_dir>
arm64-apple-darwin24.cfg
arm64-apple-darwin24-clang++.cfg
$ clang++ --config-user-dir=<path_to_config_dir> a.cpp

環境

Apple M1
macOS Sequoia 15.1.1
Homebrew clang 19.1.7

参考文献

  1. https://clang.llvm.org/docs/UsersManual.html 2

  2. https://en.cppreference.com/w/cpp/header/print

1
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?