ViVi SPR System build 0025 project:
Mail: Pass:
[ 新規アカウント作成 | パスワード忘れ ]
[ 新規SPR | SPR一覧 | コメント一覧 | statistics | 最新ビルド:3.08.042 | crash履歴 | SPR DB 一覧 | ユーザ一覧 | 使い方 | レポートの書き方 ] [ ViVi Home ]
一覧表示: [ New | Pend | Open | Reopen | Fixed | NPTF | 問題優先順 | 問題vote順 | 優先順 | vote順 | 重要度順 | Ref,ToDo | Help不備 | 対処順 ]
[ 前のSPR | 次のSPR ]
SPR#0105 1 point voted
状態:Close結果:却下優先度:C重要度:T
報告日:11/02/21build:2.10.093OS:Win7by:オニオン
概要:インクルードディレクトリ指定で、絶対パスではなく途中からのパス指定に対応していただきたい
詳細:同一プロジェクトが Trunk/Branchなど異なる環境に存在する場合、
インクルードファイルへのタグジャンプが意図通りに出来ません。
Branchで作業しているつもりが、タグジャンプで意図せずTrunkのファイルを開いてしまい、
Trunk側のファイルを修正してしまうこともあり、不便に感じています。

■ 操作前状態:
<フォルダ構成>
C:\trunk
     prj1
       inc
         test.h
       src
         test.cpp
C:\branch
     prj1
       inc
         test.h
       src
         test.cpp

<test.cppの内容>
#include "test.h"

<設定>
[Global Settings]-[その他]-[インクルードディレクトリ] : C:/trunk/prj1/inc,C:/branch/prj1/inc

■ 具体的操作:
C:\branch\prc1\src\test.cpp を開き、#include 行でタグジャンプする。

■ 操作後状態:
trunk側(C:\trunk\prc1\inc\test.h)のヘッダファイルにジャンプしてしまう。

■ 期待する状態:
[インクルードディレクトリ]指定で、
"C:/trunk/prj1/inc,C:/branch/prj1/inc"  のような絶対パス指定だけでなく、
"prj1/inc"  のような途中からのパスを指定できるようにしていただきたい。

■ 補足
相対パス指定では、フォルダ構成が深くなるとすべての組み合わせを設定する必要があり、設定が大変になるので、
途中からのパス指定にしていただきたいです。
添付画像:
point:0対処日: build: close日:11/02/21
#1 つだ (11/02/21 08:36:38)
SPR登録ありがとうございます。

ところで、相対パス指定した場合の、起点ディレクトリはどこになるのでしょうか?

[1] vivi.exe のディレクトリ?
[2] カレントディレクトリ?
[3] プロジェクトメンバであれば、プロジェクトファイルのあるディレクトリ?

上記3つが考えられますが、以下のような問題があります。
[1] はファイル郡とは無関係なのでよろしく無い気がします。
[2] はカレントディレクトリが特定の場所にないと意図したように動作しないのでよろしくないと思います。
[3] プロジェクトが無い場合はどうしましょ?
#2 つだ (11/02/21 08:40:18)
おいらの場合は、本件のようなディレクトリ構成だったら #include "../inc/test.h" のように
相対パスを書いちゃいますけどね。
#3 オニオン (11/02/21 08:54:13)
検討ありがとうございます。

>>1
[2]カレントディレクトリ(今開いているcppファイル)からを起点にしていただきたいです。
フォルダの起点については、指定されたパスの最初のフォルダ名("prj1/inc"の場合だと "prj1")を、
cppファイルのパスから上位階層にさかのぼって検索し、一致すればそこを基点とします。一致しなければジャンプできなくてもいいと思っています。

>>2
#include "../inc/test.h" のような書き方は、今のプロジェクトでは許されておらず、
Makeファイルで参照ディレクトリを指定する方式なのです。すいません。
#4 つだ (11/02/21 10:29:37)
んと、よく考えらた、インクルードパス指定を「../inc」の様に、相対パス指定しておけば済む話じゃないんでしょうか?
#5 つだ (11/02/21 10:30:36)
↑ ViVi の [Global Settings]-[その他]-[インクルードディレクトリ] の話です。
#6 オニオン (11/02/21 12:44:04)
途中からのパス指定が良い理由が2つあります。

【理由1】
補足に書いていますが、フォルダ構成が深くなると設定するのが厳しいです。
例えば、以下のような場合、

branch\prj1
 common_inc (共通インクルードディレクトリ)
  dir1
   inc1.h
   dir2
    inc2.h
 module1
  dir1
   src1.cpp  (ここからinc1.h, inc2.hをインクルード)
   dir2
    src1.cpp  (ここからinc1.h, inc2.hをインクルード)
    dir3
     src1.cpp  (ここからinc1.h, inc2.hをインクルード)

相対パス指定では以下の指定となります。
../../common_inc/dir1,../../common_inc/dir1/dir2,../../../common_inc/dir1,../../../common_inc/dir1/dir2,../../../../common_inc/dir1,../../../../common_inc/dir1/dir2,

途中からのパス指定では、以下のように簡潔に設定出来ます。
common_inc/dir1, common_inc/dir2

今のプロジェクトは複雑なフォルダ構成ですので、相対パスで設定できる自信がありません。

【理由2】
相対パスはcppファイル側のフォルダ階層が増えると再設定が必要になってしまうので、途中からのパス指定の方がいいです。
#7 つだ (11/02/21 17:51:08)
えと、>>3 には
> [2]カレントディレクトリ(今開いているcppファイル)からを起点にしていただきたいです。
と書いておられますが、それは撤回されるのでしょうか?
#8 オニオン (11/02/21 20:54:48)
>>3 で言いたかったのは、

途中からのパス指定で指定された最初のフォルダ名("prj1/inc"の場合だと "prj1")を検索ワードとし、
cppファイルのカレントディレクトリパスから上位階層にさかのぼって検索してほしいとの意味です。

答えになっているでしょうか。
#9 つだ (11/02/21 21:55:12)
うーん、なんかおっしゃってる仕様がわたしの好みではないので
本件は却下ということにします。
#10 オニオン (11/02/22 05:32:56)
あらら、そうなるとは。。。残念です。
仕様がちょっとトリッキーで設定も直感的でないということなのでしょうか。

では、相対パスで[2]カレントディレクトリ(今開いているcppファイル)からを起点にするのでも
現状よりは改善されるのでありがたいのですが、対応可能でしょうか。
可能であれば別SPR起票します。検討お願いします。
#11 つだ (11/02/22 12:44:21)
> 仕様がちょっとトリッキーで設定も直感的でないということなのでしょうか。
そのとおりです。
オニオンさんの現プロジェクトの規則が私には非合理的で変だと思います。
わたしが非合理的だと思うものには特別なことが無い限り対応しません。

> では、相対パスで[2]カレントディレクトリ(今開いているcppファイル)からを起点にするのでも
> 現状よりは改善されるのでありがたいのですが、対応可能でしょうか。
現状そうなっていると思いますが、そうなっていないですか?
#12 そと (11/02/22 14:11:30) ★★
横やりです。
このケースだと使用するソースを切り替える仕組みを入れる方が簡単かも。

オニオンさんのようなプロジェクトソースのケース、私もよく遭遇します。
C:\xxxProject_201007
C:\xxxProject_201011
C:\xxxProject_201102
などなど、時間的なバージョンによるもの。
それとかオニオンさんのように幹が異なるもの。例えば家電とか携帯電話のソフトウェア。
豪華版や廉価版が機種ごとに設定されているがソースは共通で、その階層もほとんど同じなんてこともあるはず。

私はsubstで使うソースを切り替えてます。
subst s: C:\xxxProject_201102
のようにして、ソースを編集する作業はSドライブでおこないます。
だからインクルードディレクトリの設定はSドライブからの絶対パス。
tagsもSドライブにsubstした状態でSドライブ直下に作ります。
それなら使用しているのがbranch/trunkどちらでも正しくジャンプできます。
害になるのは、片方にしか存在しない定義位置に「:ta XXX」で飛ぼうとしたときくらいだけど、
これはViViが「tagsに登録されてない」と注意するくらいで特に害でもないかな。

この方法なら同じような階層が何個あろうが瞬時に切り替えられますよ。
#13 つだ (11/02/22 14:33:50)
>>12
なるほど〜
アドバイスありあとうございまする〜
#14 オニオン (11/02/22 17:00:58)
>>11  現状そうなっていると思いますが、そうなっていないですか?
すいません、相対パスは有効なのですね。
相対パスで設定してみます。

>>12 そとさん
アドバイスありがとうございます。
substコマンドは知りませんでした。使えますね。
相対パス設定に挫折したら使用させていただきます。
[ 新規SPR | SPR一覧 | コメント一覧 | statistics | 最新ビルド:3.08.042 | crash履歴 | SPR DB 一覧 | ユーザ一覧 | 使い方 | レポートの書き方 ] [ ViVi Home ]
一覧表示: [ New | Pend | Open | Reopen | Fixed | NPTF | 問題優先順 | 問題vote順 | 優先順 | vote順 | 重要度順 | Ref,ToDo | Help不備 | 対処順 ]


優先度:重要度(Severity):
 A:最優先で対処  A:通常操作でのクラッシュ・無限ループ
 B:必ず対処  B:特殊な条件、環境でのクラッシュ・無限ループ、非常に重要な動作不良
 C:原則対処  C:機能が動作しないなどの普通の動作不良
 D:簡単であれば対処 D:些細な動作不良で、簡単な代替手段があるもの
 E:NPTF候補 E:ミススペルや誤った文章など、機能そのものの動作に影響を与えない、さほど重要ではないもの
  H:ヘルプの不備
  M:メモリリーク
  P:パフォーマンス問題
  R:リファクタリング
  T:機能強化要望(Enhancement)、ToDo
  X:XT(eXtreme Toolkit)に由来する問題