컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Monday, October 09, 2006

C언어] cl.exe: 소스 파일 여러개 한꺼번에 컴파일하는 배치파일: Multiple Source Files Compile at Once


여러 개의 .cpp 소스 파일을 한꺼번에 컴파일하는 강력한(?) 배치 파일을 소개합니다.

수십 수백 개의 C소스를, 서로 독립적으로 한꺼번에 컴파일하려면 와일드카드로는 안되더군요 -_-? 그래서 다음과 같이 배치 파일 (Batch File)을 만들었습니다.

@echo off

for %%i in (*.cpp) do cl.exe "%%i"

위의 박스의 배치파일 코드를 hanq.bat 등의 적당한 이름으로 저장하고, 실행시키면

D:\Y>hanq.bat
0.cpp
10.cpp
dump_array.cpp
strdump_to_word.cpp

D:\Y>dir
 D 드라이브의 볼륨: Foo
 볼륨 일련 번호: F8A0:572A

 D:\Y 디렉터리

2006-10-09  11:44a      <DIR>          .
2006-10-09  11:44a      <DIR>          ..
2006-10-08  05:33p               1,803 0.cpp
2006-10-09  11:44a              45,056 0.exe
2006-10-09  11:44a               3,196 0.obj
2006-10-08  04:18p                 447 10.cpp
2006-10-09  11:44a              36,864 10.exe
2006-10-09  11:44a                 931 10.obj
2006-09-28  03:36p                 969 dump_array.cpp
2006-10-09  11:44a              40,960 dump_array.exe
2006-10-09  11:44a               3,766 dump_array.obj
2006-10-09  11:26a                  59 hanq.bat
2006-09-29  04:15p               2,035 strdump_to_word.cpp
2006-10-09  11:44a              36,864 strdump_to_word.exe
2006-10-09  11:44a               2,351 strdump_to_word.obj
              13개 파일         175,301 바이트
               2 디렉터리  57,680,314,368 바이트 남음

D:\Y>

이렇게 현재 디렉토리의 모든 C소스가 서로 독립적인 exe 파일로 컴파일됩니다. (참고로, 위의 화면은 CL에 /nologo 옵션을 주었기에, 화면이 간결하게 나왔습니다.)


만약 C소스 확장자가, .cpp 가 아닌 그냥 .c 라면

for %%i in (*.c) do cl.exe "%%i"

이렇게 고쳐 주어야 하겠지요. 그렇지만 컴파일 환경에 따라서, C++가 아닌 순수한 C라도 확장자가 .cpp 가 아니면 컴파일이 안되고 오작동하는 경우가 많습니다. 따라서 순수한 C소스라도 확장자를 .cpp 로 하는 것이 무난하더군요.



원래, 비주얼C++ 명령행 컴파일러인 cl.exe 에, *.cpp 등의 와일드카드를 주어 여러 소스 파일을 한꺼번에 컴파일하려고 하면 다음과 같은 에러가 납니다.

D:\Y>cl.exe *.cpp
0.cpp
10.cpp
dump_array.cpp
strdump_to_word.cpp
Generating Code...
10.obj : error LNK2005: _main already defined in 0.obj
dump_array.obj : error LNK2005: _main already defined in 0.obj
strdump_to_word.obj : error LNK2005: _main already defined in 0.obj
0.exe : fatal error LNK1169: one or more multiply defined symbols found

D:\Y>cl 0.cpp 10.cpp
0.cpp
10.cpp
Generating Code...
10.obj : error LNK2005: _main already defined in 0.obj
0.exe : fatal error LNK1169: one or more multiply defined symbols found
D:\Y>

링커(Linker)가 모든 .obj 파일들을 합치려다가 에러가 나고 있습니다.


▶▶ C언어 팁] cl.exe: C소스 컴파일 + 컴파일된 프로그램 실행을 동시에 하는 법: Handy Compile

▶▶ 배치파일] FOR 문 예제. for in do 사용법 - 도스 DOS Bat File 강좌

☞ C/C++

☞ BATCH(.BAT)/VBScript(.VBS)

0 Comments:

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top