제가 OpenCV 강의에서 예제 프로그램 실습을 진행할 때, 예전에는 Visual Studio, 특히 Visual C++에서 [Win32 콘솔 응용 프로그램] 형식으로 새 프로젝트를 만들어서 코딩을 했습니다. 특히 stdafx.h 파일을 사용하는 "미리 컴파일된 헤더" 기능을 사용하지 않는 프로젝트를 만들기 위해 응용 프로그램 설정 창에서 "빈 프로젝트" 항목을 선택하여 프로젝트를 만들었는데요...


최근에 Visual Studio 2017 버전이 15.3 이상으로 변경되면서 Win32 콘솔 응용 프로그램 템플릿이 아예 사라져버렸습니다. 대신에 가장 비슷해보이는 [Windows 콘솔 응용 프로그램] 템플릿을 사용하면 stdafx.h 파일을 사용하는 프로젝트를 만들어줘서 난감했었는데요..


인터넷을 찾아보니 Visual Studio 2017 릴리즈 노트에 해당 내용이 적혀있었습니다.

https://www.visualstudio.com/ko-kr/news/releasenotes/vs2017-relnotes


위 링크에서 중간쯤 내려보면 아래와 같은 내용이 적혀있네요.


위에서 맨 마지막에 적혀있듯이 이전의 [Win32 콘솔 응용 프로그램]과 같은 형식으로 새 프로젝트를 만들려면 [Windows 데스크톱 마법사] 항목을 선택하면 됩니다.


예를 들어, Visual Studio 2017에서 [파일] -> [새로 만들기] -> [프로젝트] 메뉴를 선택하고, 새 프로젝트 창에서 [Windows 데스크톱 마법사] 항목을 선택한 후 [확인] 버튼을 클릭합니다.


그러면 아래와 같은 옵션 창이 나타나는데요,


여기서 기본 선택되어 있는 [미리 컴파일된 헤더] 항목의 선택을 해제하고, [빈 프로젝트] 항목을 선택하면 완전히 비어있는 새 프로젝트를 만들 수 있습니다. 그리고나서 [프로젝트] -> [새 항목추가] 메뉴를 선택하여 새 소스 파일 또는 헤더 파일을 추가하여 코딩을 시작하는 것이죠.

음.. 이제 Win32라는 용어도 점차 사라지는 추세인 것 같네요..



Posted by kkokkal
:

패스트캠퍼스에서 진행하고 있는 OpenCV 강의에서 사용되는 예제 프로그램은 100개가 훨씬 넘습니다. 매번 새로운 강의가 시작될 때마다 Visual Studio 버전이 바뀌거나 OpenCV 라이브러리 버전이 바뀌면 모든 프로젝트를 새로 빌드해서 테스트를 진행하는데요, 100개가 넘는 프로젝트를 Visual Studio에서 불러와서 하나씩 하나씩 컴파일하고 빌드하려고 하면 너무 번거롭습니다. 그래서 일괄 빌드 방법을 알아봤습니다.


일단 저의 OpenCV 강의는 8주 과정으로 이루어져있기 때문에 "1주차_예제_코드", "2주차_예제_코드", ... 같은 형태의 폴더가 있고, 그 아래에 여러 개의 예제 프로젝트 폴더를 만들어두었습니다. 그러므로 현재 폴더에서 "N주차_예제_코드" 폴더를 모두 찾고, 그 아래에 있는 폴더들에 각각 들어가서 예제 프로젝트를 빌드해야 합니다. 이 작업을 수행하는 배치 파일 build_all.bat 파일을 아래와 같이 작성했습니다.


@ECHO OFF

SET CURR=%CD%
ECHO Current dir: %CURR%

FOR /D %%i IN (%CURR%\*) DO (
  PUSHD %%i
  ECHO Check sub-dir in %%i

  FOR /D %%k IN (%%i\*) DO (
    PUSHD %%k

    ECHO Now in %%k

    IF EXIST "*.vcxproj" (
      ECHO Build the project in %%k
	  
      msbuild /t:Rebuild /p:Configuration=Release
      copy .\x64\release\*.exe .
      rmdir x64 /S /Q
	  
    ) ELSE (
      ECHO No project in %%k
    )	

    POPD 
  )

  POPD 
)


위 배치 파일은 현재 폴더에서 하위 폴더들을 모두 찾고, 각각의 하위 폴더에서 또 한번 하위 폴더들을 찾아서 방문하고, 해당 폴더에 *.vcxproj 파일이 있는 경우에는 해당 프로젝트를 Release 모드로 빌드합니다. 그리고 생성된 ./release/<proj_name>.exe 파일을 프로젝트 폴더쪽으로 복사한 후, release 폴더는 지워버립니다. 그러면 나중에 실행 파일을 쉽게 실행하여 결과를 볼 수 있기 때문에 유용하죠.


아래는 실제로 build_all.bat 파일을 실행했을 때의 결과입니다. (프로젝트 몇 개만 복사해서 테스트해봤습니다.)


위에 나타난 도스창은 CMD 또는 일반 명령 프롬프트가 아니라 시작 메뉴에서 Developer Command Prompt for VS 2017 라는 이름을 검색해서 실행한 창입니다. Visual Studio 프로젝트 빌드를 위한 환경 설정이 적용된 창이라서 msbuild라는 이름의 빌드 명령을 사용할 수 있습니다.


만약 현재 폴더 아래의 하위 폴더에 존재하는 모든 프로젝트를 빌드하려면 위 배치 파일을 아래처럼 변경하면 되겠죠?

@ECHO OFF

SET CURR=%CD%
ECHO Current dir: %CURR%

FOR /D %%i IN (%CURR%\*) DO (
  PUSHD %%i
  ECHO Check sub-dir in %%i

  IF EXIST "*.vcxproj" (
    ECHO Build the project in %%i
	  
    msbuild /t:Rebuild /p:Configuration=Release
    copy .\x64\release\*.exe .
    rmdir x64 /S /Q
	  
  ) ELSE (
    ECHO No project in %%i
  )	

  POPD 
)


한 가지 주의할 점은, 빌드하려고 하는 전체 경로 이름에 빈칸이 있으면 안됩니다. 배치 파일의 FOR 구문에서 빈칸에 대해서는 제대로 처리를 하지 못하네요.


Posted by kkokkal
: