5

ADD_CUSTOM_COMMANDを使用して、 vc2010プロジェクトにいくつかのカスタム ビルド コマンドを追加しようとしています。しかし:

[1] CMAKE が予想よりもはるかに多くのコードを自動的に挿入することがわかりました。

たとえば、コマンドを正確に次のようにします。

"c:\Some Folder\MyTool.exe" -arg0 -arg1

CMakeLists.txt の対応するコードは次のようになります。

add_custom_command( OUTPUT ${outfile}
                  COMMAND "c:\Some Folder\MyTool.exe" ARGS "-arg0 -arg1"
                  # COMMAND "\"c:\Some Folder\MyTool.exe\"" will FAIL to be parsed!
                  MAIN_DEPENDENCY ${infile}
                  VERBATIM)

しかし、実際に私は得ました:

setlocal
c:\Some Folder\MyTool.exe "-arg0 -arg1"
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd

これは私が望むものではありません。string: も試しましたCOMMAND "\"${MYTOOL_PATH}\" -arg0 -arg1"が、文字列の前に引用符があるため、CMake は解析に失敗しました。c:\Some Folder\MyTool.exeパスにスペースが含まれているため、コマンド文字列を引用できないのは残念です。

[2]また、CMake が依存関係のパスを自動的に展開することにも気付きました。

コマンドに を追加すると、DEPENS "$(PATH_MACRO)"最終的に CMake によって自動的に展開された依存関係パスが取得されますC:\MySolutionDir\$(PATH_MACRO)。しかし$(PATH_MACRO)、ビジュアルスタジオが何を参照しているかを確実に理解できるようにするため、のみが必要です$(PATH_MACRO)

だからここに私の質問があります

パスを自動展開したり、予期しないコードを挿入したりせずに、CMake が生の入力のみを受け入れるにはどうすればよいですか? 入力がビジュアル スタジオで有効であることを確認します。ありがとう!

PS。私の CMake バージョン: 2.8.10.2。VS版:ビジュアルスタジオ2010 Ultimate

4

2 に答える 2

0

問題 1 については、 を試してください"c:\\Some Folder\\MyTool.exe" -arg0 -arg1。パラメータは必須ではARGSありませんが、ポイントは . を囲む引用符を省略すること-arg0 -arg1です。

問題 2 について$(PATH_MACRO)は、絶対パスではないため、CMake はそれをソース ディレクトリからの相対パスと見なします。これを解決する最善の方法は、おそらく「ジェネレーター式」を使用することですが、正確なケースに関する詳細情報がなければ、より良い答えを提供できません.

ジェネレータ式の詳細については、 のドキュメントを参照してくださいadd_custom_command

于 2013-04-17T07:18:38.593 に答える