[FreeBSD-users-jp 96164] cmake と iconv.h
Hiroo Ono (小野寛生)
hiroo.ono+freebsd @ gmail.com
2017年 11月 13日 (月) 14:55:17 UTC
小野寛生です。
FreeBSD の話ではあんまりないのですが、ほかに聞けそうなところを思いつかないので
すみません。
ちょっとしたプログラムを書いていて CMake を使ってみたのですが、次の問題にぶつ
かって悩んでいます。
C++ のソースの中で
#include <iconv.h>
と書いて iconv を使いました。
意図としては、/usr/include/iconv.h を include して libc にある iconv
を使いたいです。
CMake を使うと /usr/local/include/iconv.h (GNU libiconv のやつ) を見つけて
そっちを読み込んでしまいます。
CMakeLists.txt の中で target_include_directories に /usr/include と
/usr/local/include を書いて順番を前後してみたりしましたが変わりませんでした。
/usr/local/include は boost を使いたいので参照したいのです。
ports を作成している人は同じ問題にぶつかったことがあると思うのですが、
どういう解決方法があるでしょうか。
1. cmake でなんとかする 方法が知りたいのですが、cmake のドキュメントで関係
しそうなところを読んでも、web検索してもわからず、困っています。
2. cmake を捨てる。
の場合にお薦めがありましたら教えてください。ports に入っているものがいいです。
make を素で使えばいいじゃんというのもまあありなのですが、Linux に持って
いったら面倒かもとか思っています。/usr/share/mk/bsd.*.mk を使わないと
ちょっとめんどくさい程度にしか使えませんので。
automake/autoconf は使いたくありません。
3. GNU の軍門に下って libiconv を使う。
libc の中にあるものが使えるのに、余分なものに依存はあんまりしたくないなあ
と思っています。(CMake は? と言われそう)
4. (ビルド環境で) /usr/local/include/iconv.h を消す。
という解決策を書いている人がいました。Python の virtualenv に染まって
しまって、libiconv を開発に使いたい人は自分の領域のところに libiconv
を入れて使えばいいじゃんという気にはなるのですが、package がアップデート
されるごとに問題が再燃するかなと。あと、それなら boost を自分専用に持てば
と言われそうですね。
5. #include "/usr/include/iconv.h" とやって使う。
なんか怒られそうですが、*BSD と Linux くらいしか考えず、別アーキテクチャ
向けのクロスビルドをしないなら、それで通るような気がしています。
FreeBSD 以外での確認はしていませんが。
というわけで、何かよい方法がありましたら教えてください。
freebsd-users-jp メーリングリストの案内