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

 
Previous Post 엑셀VBA매크로.예제: 셀 테두리에 색상 지정, 행운의 시트 만들기, Excel Sheet...자바/Java] 부동소수점 연산 오차 수정 출력하기 - Floating-Point: 9.7...한글을 한자로 변환 입력하기: 포토샵/울트라에디트, Chine Character Input...한자] 초서, 전서, 예서, 행서, 해서 검색 사이트: Chinese Seal Charac...윈도우] 리눅스 히든파일명으로 리네임, 파일명 앞에 마침표(.)넣기: Rename Linu...울트라에디트 자동완성 파일 만들기/지정하기 - UltraEdit Auto-Completio...Vim, VI, GVim 에디터: 자동 완성 핫키 - Auto-Complete, Word ...울트라에디트 자동완성 핫키 - UltraEdit Auto-Complete Hotkey엑셀/Excel] VBA의 Rnd 함수로, 1에서 100까지의 랜덤 숫자 만들기엑셀] VBA에서 RAND() 함수 에러: Sub 또는 Function이 정의되지 않았습니...

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

Monday, October 09, 2006

여러 개의 .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 주소를 리더기에 등록하시면 됩니다.
Categories
Previous Posts
Monthly Archives
Top