小野寛生です。 cmake の問題ではありませんでした。
2017/11/13 Hiroo Ono (小野寛生) <hiroo.ono+free...@gmail.com>: >> 小野寛生です。 >> 意図としては、/usr/include/iconv.h を include して libc にある iconv >> を使いたいです。 >> >> CMake を使うと /usr/local/include/iconv.h (GNU libiconv のやつ) を見つけて >> そっちを読み込んでしまいます。 という問題ですが、 > それはともかく、 -I がどのような順序になるように生成されているのか、確認した方が良い気はします。 という指摘をいただいて確認したところ、 CMakeFiles/target.dir/flags.make:CXX_INCLUDES = -I /usr/local/include -I/usr/home/hiroo/work/foo/src/target/../include のようになっていて、CMakeLists.txt の target_include_directories で /usr/include を 指定してもしなくても変わりませんでした。 それ以前に、そもそも cc でも -I に /usr/include を指定しても無視されていました。 でもって、Cコンパイラの (少なくとも gcc や clang での) インクルードファイルの 検索順は、 1) -I で指定されたディレクトリ 2) -isystem で指定されたディレクトリ 3) システムディレクトリ (/usr/include はここ) となっていて、/usr/local/include に libiconv の iconv.h がある場合に、 インクルードディレクトリに /usr/local/include を指定すると詰んでしまうようです。 FreeBSD の ports&package の場合ですが、libiconv には glib が依存していて、 これにいろんな ports が依存しているので、どれか一つでも入れるとひっかかります。 というわけで、glib なりそれに依存しているライブラリなりを使う場合は > 3. GNU の軍門に下って libiconv を使う。 しかなさそうです。cmake は幸い libiconv ではなく icu を使っているので、 クリーンなやり方の順に 4') jail を使って libiconv をインストールしていない環境を用意してそこで ビルドする。 5. #include "/usr/include/iconv.h" とやって使う。 > 4. (ビルド環境で) /usr/local/include/iconv.h を消す。 か ln -s /usr/include/iconv.h /usr/local/include/iconv.h とやる。 というあたりが結局解決方法なのかなと考えています。 _______________________________________________ freebsd-users-jp@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-users-jp To unsubscribe, send any mail to "freebsd-users-jp-unsubscr...@freebsd.org"