최초작성

2006/05/14 22:56:37

참고

이 페이지를 읽기전에 cmakeMSVC와같이쓰기 를 읽어두자..

목적

cmake 가 중간파일들을 지저분하게 생성하길래 소스디렉토리가 아닌 다른 디렉토리, 예를들어 ./build 등을 쓰게 되었는데 이러다 보니 M-x compile 로 make 또는 nmake 를 돌리기가 곤란하더라. 그래서 소스 코딩중에 make 파일의 위치가 지정되어 있는경우에 한해서, f7 키를 누르면 빌드 디렉토리로 이동하고 커맨드라인을 통해 빌드를 하는 함수를 급조했다.

nmake 러너

처음엔 C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat 의 환경설정들을 모두 emacs 안으로 가져올려고 이런 함수까지 짜서 노가다를 했었는데,

돌려보니 cl.exe 가 에러를 뱉더라. 뭔가 초기설정값을 빠트린 모양인데.. 조금 찾아보다가 방향을 바꿔서 vsvars32.bat 를 실행후 nmake 를 돌리는 배치파일을 만들어버렸다. run-nmake.bat 라는 이름으로 적당한데 던져두자

아.. 그리고 vsvars32.bat 에 PSDK 세팅을 추가하는것일 잊지말자. 나는 어쩌다 보니 cmake path 도 여기서 잡게 되었다..

make 위치 지정

make 파일의 위치가 프로젝트마다 다르니.. 이건 dirvars.el 를 통해 해결하기로 했다. 적당한 위치의 .emacs-dirvars 에 cmake-nmake-location 설정이 들어있어야만 한다.

cmake 를 이용해 뽑은 출력이 NMake 의 Makefile 이 아니고 Unix 스타일의 Makefile 이라면, 즉 gcc 또는 mingw 환경이라면 cmake-make-location 변수를 세팅한다.

코드

후럴.. 코드가 너무 더러운데.. 별수 없지. 몇가지 적어두면.. f7 을 눌렀을때 버퍼 이동없이 바로 빌드가 되도록 하려고 했는데 실패했다. save-어쩌구 함수들을 살펴보긴 했는데 잘 안되더라. 그래서 그냥 CMakeLists.txt 파일을 열도록 수정해버렸다. 이게 나름대로 편리하다.

cmake-make-location 또는 cmake-nmake-location 이 모두 nil 이면 일반적인 M-x compile 을 실행한다. 혹시 필요하면 MSVC와같이쓰기 의 내용도 적용해두자.

*.sln 를 지정하고 싶은 경우도 있을텐데.. visual studio 2003 의 devenv.exe 는 커맨드라인으로 빌드가 가능한데 2005 express 의 vcexpress.exe 는 그 옵션이 안먹더라.. 쉣.. 후에 방법을 찾거나 MSBuild 사용법을 익히게 되면 그경우도 고려해두자. 혹시나 cmake 로 *.sln 을 뽑아냈다면 IDE 를 통해 빌드를.. 헐..

매크로를 쓰면 코드를 깔끔하게 뺄수 있을거 같은데.. 이건 나중에.

테스트..

사무실 Subversion 에 접근이 안되서.. 뭔가 열심히 적긴 적었는데 집의 msvc 2005 express 에서만 테스트를 해봤다. mingw 나 다른 환경에서도 잘 되는지는 아직...

2006/10/13 재정리, yoonkn-build 함수 작성

윗글을 쓸때는 cmake 의 out of source 하는 방법을 잘 몰랐는데 그냥 써보니 잘 되더라. 그래서 빌드하는 방법을 다소 수정했다.

예를들어 소스 트리 구조가 이렇다고 해보자

이상태에서 c:/tmp/a/build 를 빌드 트리로 이용하려고 하면 c:/tmp/a/.emacs-dirvars 등에 아래 내용을 추가하고

.emacs-dirvars 가 적용된 버퍼내에서 yoonkn-build 함수를 실행하면 된다.

yoonkn-build 와 msvc8

이따위로 적어서 쓰자

흠. gtags 등을 돌리려고 할때는 요렇게.. msvc 내에서 pre build 세팅해도 되지만 pre build 는 가능하면 안쓰는게 편하더라.

@echo off
call "%VS80COMNTOOLS%vsvars32.bat"
IF not EXIST "GTAGS." (
gtags
) ELSE (
global -u
)
devenv.com %1 %2 %3 %4 %5 %6 %7 %8 %9
@echo on

msvc IDE 가 떠있으면 *.ncb 파일을 열다가 에러 나는데.. gtags 에 *.ncb 를 skip 하도록 하는 방법을 아직 모르겠다. conf 내의 설정에 skip 이 있긴 한데 패턴을 받지 않고 fullname 을 받는듯?


CategoryEmacs

EmacsWithCmake (last edited 2007-07-14 10:07:06 by dreamstorm)