1

cmake プロジェクトの生成とコンパイルを自動化する .bat を作成します。バッチファイルは

  1. オプションrmdir build
  2. mkdir build存在しない場合
  3. cd build
  4. cmake ..上のフォルダからnmakeプロジェクトを生成
  5. nmakeプロジェクトをコンパイルする

起源:

@ECHO OFF
set "OpenCV_LIB=C:\Program Files (x86)\OpenCV2.1"
echo !! OpenCV Library: [ %OpenCV_LIB% ]
IF NOT EXIST "%OpenCV_LIB%" (
    echo Can't find OpenCV Library, please change OpenCV_LIB setting
    GOTO END
)

if %PROCESSOR_ARCHITECTURE%==x86   set BUILD_ARCH=x86
if %PROCESSOR_ARCHITECTURE%==AMD64 set BUILD_ARCH=x86_amd64
if %PROCESSOR_ARCHITECTURE%==IA64  set BUILD_ARCH=x86_IPF
echo !! Target architecture [ %BUILD_ARCH% ]
call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" %BUILD_ARCH%

cd "sikuli-script"
set /p answer=Do you want to make clean first? (Y/N):
if %answer% == Y ( IF EXIST build rmdir /s /q build )
if %answer% == y ( IF EXIST build rmdir /s /q build )

IF NOT EXIST build mkdir build
cd build

IF NOT EXIST CMakeCache.txt ( cmake -G "NMake Makefiles" -D CMAKE_BUILD_TYPE=Release -D "OpenCV_DIR=%OpenCV_LIB%" .. )
nmake

:END
pause

この .bat を何度も実行した後、cd build時々失敗することに気付いたので、コードを変更してテストしました。

@ECHO ON
set /p answer=Do you want to make clean first? (Y/N):
if %answer% == Y ( IF EXIST build rmdir /s /q build )
if %answer% == y ( IF EXIST build rmdir /s /q build )
:DO_MKDIR_CD
IF NOT EXIST build mkdir build
cd build
if errorlevel 1 (
    pause
    GOTO DO_MKDIR_CD
)

buildサイズが小さい場合でも、クリーンアップを選択するたびにエラーが発生することがわかりますbuild(たとえば、コンパイルが中断された後、サイズ3.08 MB、183ファイル、67ディレクトリ)。

!! OpenCV Library: [ C:\Program Files (x86)\OpenCV2.1 ]
!! Target architecture [ x86_amd64 ]
Setting environment for using Microsoft Visual Studio 2010 x64 cross tools.

D:\repo\sikuli>cd "sikuli-script"

D:\repo\sikuli\sikuli-script>set /p answer=Do you want to make clean first? (Y/N):
Do you want to make clean first? (Y/N):y

D:\repo\sikuli\sikuli-script>if y == Y (IF EXIST build rmdir /s /q build  )

D:\repo\sikuli\sikuli-script>if y == y (IF EXIST build rmdir /s /q build  )

D:\repo\sikuli\sikuli-script>IF NOT EXIST build mkdir build

D:\repo\sikuli\sikuli-script>cd build
Access is denied.

D:\repo\sikuli\sikuli-script>if errorlevel 1 (
pause
 GOTO DO_MKDIR_CD
)
Press any key to continue . . .

そのため、毎回 remove と recreatebuildcd build失敗cmakeし、ソース ツリーが台無しになります。

エラーチェックとループ試行でこの問題を解決できますが、ファイルシステムが安定しないのはなぜですか? または私は間違った方法でそれを書いていますか?

4

1 に答える 1

0

そのビルド ディレクトリ チェック:

IF NOT EXIST build mkdir build

「build」という名前のディレクトリファイルの両方が存在しない場合、ディレクトリを作成します。

ディレクトリの存在を確認する 1 つの方法は次のとおりです。

if exist build\nul echo directory exist

ディレクトリが存在することを確認したい場合は、次を使用します。

if not exist build\nul mkdir build

またはそれ以上:

if not exist build\nul (
  mkdir build
  if not exist build\nul (
    echo mkdir failed
    goto :eof
  )
)
于 2012-08-20T12:25:56.973 に答える