3

今夜、XcodeのGUIからではなく、Xcodeのコマンドラインビルドでのみ発生する厄介な問題が発生しました。

$ PROJROOTの再帰的なユーザーヘッダー検索パスを使用し、二重引用符を付けずにXcodeのGUIを使用してマシンから構築した場合、問題は発生しませんでした。ただし、Xcodeのコマンドラインビルド機能を使用するJenkinsでビルドすると、ヘッダーが見つからないというエラーがスローされました。

1時間の突っ込みの後、誰かが再帰的な$ PROJROOTを二重引用符( "$ PROJROOT")で囲むことを試みることにしました。これが発生すると、プロジェクトのJenkinsコマンドライン構築は最終的に成功しました。

したがって、検索パスを引用符で囲んだり、引用符を省略したりすることの影響を完全には理解していません。

誰かがこの問題を正確に引き起こしている原因に光を当てることができますか?コマンドラインとGUIからコンパイラに二重引用符は何を意味しますか?

4

2 に答える 2

10

おそらく、ビルドマシンのパスの内部にスペースがあります(例: " Macintosh HD/My Project/")。コマンドラインパーサーはスペース文字がパスの一部であるか、別のコマンドライン引数で始まるかどうかを認識しないため、コマンドラインからツールを呼び出すときに混乱する傾向があります。そのため、常に折り返すのが適切です。二重引用符で囲まれたパス。

もう1つのオプションは、スペース付きのバックスラッシュ(例Macintosh\ HD/My\ Project/)を使用することですが、それを追跡するのは少し難しく、目には難しいです。

于 2013-02-16T02:46:12.083 に答える
1

おそらく、あるツールがシェルを介して別のバイナリを実行しているときに、Bashの単語分割が行われます。

かろうじて役立つマニュアルページのドキュメント:
http ://www.gnu.org/software/bash/manual/html_node/Word-Splitting.html#Word-Splitting

単語分割の詳細な説明:http:
//mywiki.wooledge.org/WordSplitting

最後の3つをリンクとして投稿するのに十分な評判がありません。

ファイル名を処理する際の一般的な落とし穴(このリストの1位):
mywiki.wooledge.org/BashPitfalls

Posix system()を比較してください...
stackoverflow.com/questions/5666962/will-posix-system3-call-to-an-asynchronous-shell-command-return-immediately

NSTask(引数の配列を構築するため、単語分割はありません)へ...
stackoverflow.com/questions/412562/execute-a-terminal-command-from-a-cocoa-app

于 2013-02-16T03:40:16.727 に答える