• ベストアンサー

パスの優先度の設定に関しまして

パスの設定方法に関して、 アドバイスいただきたいことがあり、 質問させていただきます。 qt4をyumでインストールしたのですが、 パスを確認すると、 qt4よりqt3の優先度の方が高くなっており、 プログラムをコンパイルする際に、 qt4が認識されず困っております。 設定されているパスの表示方法(echo $PATH)や、 パスの追加方法は分かったのですが、 $ PATH=$PATH:"追加したいパス" $ export PATH パスの優先度を決めるにはどうしたらよいかを、 調べる事ができませんでした。 qt3より先に、qt4を認識させるために、 パスの優先度を変更したいです。 ご存知でしたら教えていただきえると ありがたい次第です。 OSはCentOS5系を使用しています。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
noname#136147
noname#136147
回答No.4

#3です。 一時的に使いたい、コンパイルしたい場合は 端末(Terminalなど)でコマンドを打てば良いです。 使いつづける場合、アプリケーションを立ち上げる前に毎回設定しないと動かない場合もあるので、 http://www.mythtv.org/pipermail/mythtv-users/2008-December/241017.html にあるようなスクリプトをコピーして、 /etc/profile.d/qt44.sh のようなファイルを作ってしまえば、 常に有効になると思います。 (/etc/profile.dのなかにqt3のQTDIRを設定しているファイルがあるかもしれません。) これだとすべてのユーザに有効になってしまうので、 1アカウントだけ使いたいという時は、~/.bashrc なんかに書いておくのもいいと思います。 また、リンク先はQTDIRにqt4を設定してしまっているので、 QTDIRをQT4DIRに変更して使った方がいいかもしれません。 (QT3のアプリケーションに影響するかもしれないので) 当方、Slackwareな環境なので未確認です。申し訳ないです。 ちなみにうちの環境は、/etc/profile.d/qt4.shというファイルがあって ==== /etc/profile.d/qt4.sh ===== #!/bin/sh # Environment variables for the Qt package. # # It's best to use the generic directory to avoid # compiling in a version-containing path: if [ -d /usr/lib/qt4 ]; then QT4DIR=/usr/lib/qt4 else # Find the newest Qt directory and set $QT4DIR to that: for qtd in /usr/lib/qt-* ; do if [ -d $qtd ]; then QT4DIR=$qtd fi done fi if [ ! "$CPLUS_INCLUDE_PATH" = "" ]; then CPLUS_INCLUDE_PATH=$QT4DIR/include:$CPLUS_INCLUDE_PATH else CPLUS_INCLUDE_PATH=$QT4DIR/include fi PATH="$PATH:$QT4DIR/bin" export QT4DIR export CPLUS_INCLUDE_PATH ================================= となっていて、一応QT3とQT4の住み分けが出来ております。

c_iamok
質問者

補足

bcoffeeさん! ありがとうございました。 すごく分かりやすかったです。本当に感謝しております。 さて、リンク先にもありましたとおり、 「QTDIRをQT4DIRに変更」する部分に留意し、 「vi /etc/profile.d/qt44.sh」で、 シェルスクリプトを作成し問題を解決できました! ありがとうございました! 図々しく本当に恐縮なのですが、 このqt4のインストール関係でどうしても分からないことがあり、 もう1つだけ教えてください。 Fedora9にqt4をインストールした際には 「/usr/lib/qt4/bin」ディレクトリ下に、 「qmake-qt4」というファイルがあったのですが、 同じく、 CentOS5系にqt4をインストールした際は、 「/usr/lib/qt4/bin」下には、 「qmake-qt4」というファイルは 存在していなかった次第です。 このFedoraにインストールした際に存在する、 「qmake-qt4」に代替するものというのは、 CentOSに「qt4」をインストールした場合の どのファイルに該当するか?って分かりますでしょうか? CentOSでいう「/usr/lib/qt4/bin」ディレクトリ下にある ファイルの一覧です ============ assistant designer linguist lrelease lupdate moc pixeltool qdbus qdbuscpp2xml qdbusxml2cpp qmake qt3to4 qtconfig rcc uic uic3 ============ 「これ以上は言う事なし」の場合は、 放置していただいて結構です。 もし、何か最後の一言ありましたら、 些細な事でも言及していただけると嬉しいです。 細かなアドバイスありがとうございました。 参考になりました。

その他の回答 (4)

noname#136147
noname#136147
回答No.5

#3です。 おめでとうございます。 解決してよかったですね。 qmakeとqmake-qt4の件ですが、 CentOS,Fedoraともに使っていないので以下は想像です。 うちの環境ですと、 ======================================================== % ls -l /usr/bin/qmake* lrwxrwxrwx 1 root root 21 2009-01-11 12:45 /usr/bin/qmake -> /usr/lib/qt/bin/qmake* lrwxrwxrwx 1 root root 27 2009-01-20 14:59 /usr/bin/qmake-qt4 -> /usr/lib/qt-4.4.3/bin/qmake* % ls -l /usr/bin/*-qt4 lrwxrwxrwx 1 root root 31 2009-01-20 14:59 /usr/bin/assistant-qt4 -> /usr/lib/qt-4.4.3/bin/assistant* lrwxrwxrwx 1 root root 35 2009-01-20 14:59 /usr/bin/assistant_adp-qt4 -> /usr/lib/qt-4.4.3/bin/assistant_adp* lrwxrwxrwx 1 root root 30 2009-01-20 14:59 /usr/bin/designer-qt4 -> /usr/lib/qt-4.4.3/bin/designer* lrwxrwxrwx 1 root root 30 2009-01-20 14:59 /usr/bin/linguist-qt4 -> /usr/lib/qt-4.4.3/bin/linguist* lrwxrwxrwx 1 root root 30 2009-01-20 14:59 /usr/bin/lrelease-qt4 -> /usr/lib/qt-4.4.3/bin/lrelease* lrwxrwxrwx 1 root root 29 2009-01-20 14:59 /usr/bin/lupdate-qt4 -> /usr/lib/qt-4.4.3/bin/lupdate* lrwxrwxrwx 1 root root 25 2009-01-20 14:59 /usr/bin/moc-qt4 -> /usr/lib/qt-4.4.3/bin/moc* lrwxrwxrwx 1 root root 31 2009-01-20 14:59 /usr/bin/pixeltool-qt4 -> /usr/lib/qt-4.4.3/bin/pixeltool* lrwxrwxrwx 1 root root 42 2009-01-20 14:59 /usr/bin/qcollectiongenerator-qt4 -> /usr/lib/qt-4.4.3/bin/qcollectiongenerator* lrwxrwxrwx 1 root root 27 2009-01-20 14:59 /usr/bin/qdbus-qt4 -> /usr/lib/qt-4.4.3/bin/qdbus* lrwxrwxrwx 1 root root 34 2009-01-20 14:59 /usr/bin/qdbuscpp2xml-qt4 -> /usr/lib/qt-4.4.3/bin/qdbuscpp2xml* lrwxrwxrwx 1 root root 33 2009-01-20 14:59 /usr/bin/qdbusviewer-qt4 -> /usr/lib/qt-4.4.3/bin/qdbusviewer* lrwxrwxrwx 1 root root 34 2009-01-20 14:59 /usr/bin/qdbusxml2cpp-qt4 -> /usr/lib/qt-4.4.3/bin/qdbusxml2cpp* lrwxrwxrwx 1 root root 36 2009-01-20 14:59 /usr/bin/qhelpconverter-qt4 -> /usr/lib/qt-4.4.3/bin/qhelpconverter* lrwxrwxrwx 1 root root 36 2009-01-20 14:59 /usr/bin/qhelpgenerator-qt4 -> /usr/lib/qt-4.4.3/bin/qhelpgenerator* lrwxrwxrwx 1 root root 27 2009-01-20 14:59 /usr/bin/qmake-qt4 -> /usr/lib/qt-4.4.3/bin/qmake* lrwxrwxrwx 1 root root 28 2009-01-20 14:59 /usr/bin/qt3to4-qt4 -> /usr/lib/qt-4.4.3/bin/qt3to4* lrwxrwxrwx 1 root root 30 2009-01-20 14:59 /usr/bin/qtconfig-qt4 -> /usr/lib/qt-4.4.3/bin/qtconfig* lrwxrwxrwx 1 root root 25 2009-01-20 14:59 /usr/bin/rcc-qt4 -> /usr/lib/qt-4.4.3/bin/rcc* lrwxrwxrwx 1 root root 25 2009-01-20 14:59 /usr/bin/uic-qt4 -> /usr/lib/qt-4.4.3/bin/uic* lrwxrwxrwx 1 root root 26 2009-01-20 14:59 /usr/bin/uic3-qt4 -> /usr/lib/qt-4.4.3/bin/uic3* lrwxrwxrwx 1 root root 33 2009-01-20 14:59 /usr/bin/xmlpatterns-qt4 -> /usr/lib/qt-4.4.3/bin/xmlpatterns* ======================================================== となっていて、/usr/lib/qt-4.4.3/bin にPATHを加えない代わりに /usr/bin/*-qt4 と名前を変えてリンクを張っているようです。 ので、たぶん混在しないための工夫として名前を変えているんじゃないでしょうか? CentOSとFedoraでその工夫の仕方が違うのだと思います。 /usr/lib/qt4/bin/以下のファイルは、実質的には同じものだと思います。 詳しくは、qt4のインストール時に実行されるのスクリプトか、 パッケージのビルドスクリプト(SRPMの中身 .specファイルなど)を見れば分かると思うので、 興味があれば見てみてください。 あと、名前が違って困らないのか?という疑問もあるかもしれませんが、 /usr/lib/pkgconfig/Qt*.pc (/usr/lib/qt4/pkgconfig/以下かも) に、どのコマンドを使うかの定義みたいなのがありますので心配無用です。 qt44.shの中にもあったようですが、 $ /usr/bin/pkg-config --variable=prefix QtCore のように configure スクリプト内で pkg-config コマンドを使ってどのコマンドに対応しているか判断してくれるようです。

c_iamok
質問者

お礼

bcoffeeさん! ご丁寧な御意見ありがとうございます。 大変参考になりました。 qmakeとqmake-qt4の件ですが、 御意見、とても的を得ているように感じました。 興味があるないようですので、 いただいた内容を参照し、更に調べてみたいと思います。 本当にありがとうございました。 とても勉強になりました。 20Ptではなく、200Ptくらいをもらってほしいくらいです。

noname#136147
noname#136147
回答No.3

qt3とqt4の混在環境のときは、環境変数のQTDIR,QT4DIRを利用しています。 うちの環境では、 export QTDIR=/usr/lib/qt <= qt3のインストール位置 export QT4DIR=/usr/lib/qt4 <= qt4のインストール位置 とするだけでもそのままコンパイルが通るものが多いです。 これだけではダメな場合は、下記のリンク先のように PATHとQTDIRをqt4のもので上書きしてやると良いでしょう。 2. Compiling Qt4 Applications http://wiki.zenwalk.org/index.php?title=HOWTO_Compile_QT_Applications

参考URL:
http://wiki.zenwalk.org/index.php?title=HOWTO_Compile_QT_Applications
c_iamok
質問者

補足

bcoffeeさん! ご回答ありがとうございます。 何か教えていただいた内容が改善策にマッチしている気がします。 >うちの環境では、 >export QTDIR=/usr/lib/qt <= qt3のインストール位置 >export QT4DIR=/usr/lib/qt4 <= qt4のインストール位置 >とするだけでもそのままコンパイルが通るものが多いです。 で、初歩的な事で恐縮ですが、 上記内容に関して、念のため詳しく教えて欲し事があります。 教えていただいた内容は、 任意のディレクトリで、 一時的にパスを設定するときの要領で 以下のとおり、打ち込めばいいだけな感じですが? 合っておりますでしょか? それとも、どこかのファイルに書き込む感じですしょうか? # export QTDIR=qt3のディレクト # export QT4DIR=qt4のディレクト 何度もお手前をかけさせますが、 宜しくお願い致します。

  • 774danger
  • ベストアンサー率53% (1010/1877)
回答No.2

すでに別のところでPATHの定義がされているので(${PATH}の中にqt3が含まれていると思われる)、このようになってしまうんでしょう 大元を直すか、.bashrcで、 PATH=/usr/lib/qt4/bin/qmake:${PATH} としたらどうなりますか?

c_iamok
質問者

補足

774dangerさん! 確かに PATH=/usr/lib/qt4/bin/qmake:${PATH} を行う事で、パスを確認すると、 「qt4」が一番初めに出てくるようになりました! ありがとうございました。 ただ、これでもコンパイルが進まなかったので、 もう少し、別の事もためしてみたいと思います。 ご親切にありがとうございました!

  • 774danger
  • ベストアンサー率53% (1010/1877)
回答No.1

"追加したいパス"のパスの順番を、qt3がインストールされているディレクトリよりも前にqt4のディレクトリを先に書けばいいです 使っているシェルが何かわかりませんが、bashだとしたらホームディレクトリの.bashrcあたりに設定が書いてありませんか?

c_iamok
質問者

補足

シェルはbashを使用しています。 最初は以下のとおりでした。 # echo -e ${PATH//:/'\n'} /usr/local/sbin /usr/sbin /sbin /usr/kerberos/sbin /usr/lib/qt-3.3/bin /usr/kerberos/bin /usr/local/bin /bin /usr/bin /usr/java/jdk1.6.0_10/bin で、次に、アドバイスをいただきましたとおり、 .bashrcを覗いてみたら、 何もパスらしき記述が書かれていなかったので、 自ら、一番下の行に 「qt4」が「qt3」の前にかかれる事を意識しながら、 以下のように追加しました。 PATH=${PATH}:/usr/lib/qt4/bin/qmake:/usr/lib/qt-3.3/bin その後、パスを確認すると、 以下のとおり、追加自体はされていたのですが、 やはり、元々書かれていた「/usr/lib/qt-3.3/bin」は 消えていない状態でした。 # echo -e ${PATH//:/'\n'} /usr/local/sbin /usr/sbin /sbin /usr/kerberos/sbin /usr/lib/qt-3.3/bin ←元々書かれている /usr/kerberos/bin /usr/local/bin /bin /usr/bin /usr/java/jdk1.6.0_10/bin /usr/lib/qt4/bin/qmake ←追加 /usr/lib/qt-3.3/bin ←追加 その後、念のため、 「vi /etc/profile」にも、 同様に「qt4」→「qt3」の順になるように注意しながら、 パスを追加していみたのですが、 同じ結果となってしまいました次第です。

関連するQ&A