2010-06-22 5 views
3

Cygwin에서 gcc/g ++로 Windows 7을 실행 중입니다. .cpp (C++ 소스) 및 .h (헤더) 파일을 정적 라이브러리 (.dll)로 컴파일하기위한 Makefile 형식 (그리고 확장자, 나는 그것이 .mk라고 생각하십니까?)은 무엇입니까?lib에 여러 .cpp와 .h를 컴파일하기위한 Makefile

  • file1.cpp
  • file1.h

  • file2.cpp

  • file2.h

  • file3.cpp

    : 나는 파일의 변수 세트를 가지고 말
  • file3.h

  • ....

은 무엇 정적 라이브러리에이를 컴파일하는 메이크 파일 형식 (및 확장) 할 것인가? (나는 makefile에 아주 익숙하다.) 이것을하는 가장 빠른 방법은 무엇인가?

답변

2

GNU make가 자동으로 찾길 원한다면 확장자는 전혀 없으며 Makefile이라고 부릅니다.

Make에는 자동 변수가있어 C/C++ 파일에서 많은 빌드 프로세스를 제어 할 수 있습니다. 이러한 변수에는 CC, CPP, CFLAGS, CPPFLAGS, CXX, CXXFLAGSLDFLAGS이 포함됩니다. 이들은 C/C++ 전처리 기, 컴파일러, 플랫폼 객체 및 프로그램 링커 ("프로그램 실행 파일"또는 "컴파일중인 프로그램"인 plainspeak를 생성하는 프로그램)에 대한 스위치를 제어합니다.

GNU make에는 C/C++ 소스 코드에서 프로그램을 빌드 할 수 있도록 조정 된 많은 암시 적 규칙이 포함되어 있으므로 처음부터 다시 작성할 필요가 없습니다. 예를 들어

, 심지어 없이 메이크, 당신은 make foobar을 시도하는 경우, GNU는이 중 하나를 발견하면 적절한 컴파일러를 호출하여, 첫째 foobar.c 또는 foobar.cpp에서 foobar.o를 구축하려고 시도를 확인하고 조립하여 foobar을 구축하려고 시도합니다 (링크 포함) foobar.o. 즉, GNU Make는 암시 적 규칙 덕분에 메이크 파일이 없어도 foobar 프로그램을 빌드하는 방법을 알고 있습니다. -p 스위치와 함께 Make를 호출하여 이러한 규칙을 볼 수 있습니다. make -p.

GNU에 의존하고 싶은 사람들 암시 적 규칙 데이터베이스는 자신의 프로젝트에만 한정된 간결하고 짧은 makefile을 사용하도록하고, 어떤 사람은 전체 암시 적 규칙 데이터베이스를 비활성화 할 수 있습니다 (-r 스위치 사용).) 처음부터 모든 것을 지정하여 제작 과정을 완전히 제어 할 수 있습니다. 두 전략의 타당성에 대해서는 언급하지 않겠지 만, 둘 다 어느 정도는 일을해야한다는 것을 확신합니다.

2

가 여기에 DLL을 만들 때 설정할 수 있지만 선택의 여지가 명령 줄에서 그 일을 한 경우 사용할 수있는 기본 명령입니다 있습니다

gcc -shared -o mydll.dll file1.o file2.o file3.o 

을 그리고 여기에 일반적으로 (메이크입니다 그냥 "확인"을 입력

# You will have to modify this line to list the actual files you use. 
# You could set it to use all the "fileN" files that you have, 
# but that's dangerous for a beginner. 
FILES = file1 file2 file3 

OBJECTS = $(addsuffix .o,$(FILES)) # This is "file1.o file2.o..." 

# This is the rule it uses to assemble file1.o, file2.o... into mydll.dll 
mydll.dll: $(OBJECTS) 
    gcc -shared $^ -o [email protected] # The whitespace at the beginning of this line is a TAB. 

# This is the rule it uses to compile fileN.cpp and fileN.h into fileN.o 
$(OBJECTS): %.o : %.cpp %.h 
    g++ -c $< -o [email protected]   # Again, a TAB at the beginning. 

지금 mydll.dll을 구축 : 전체 빌드 프로세스를 처리라는 Makefile).

메모 몇. makefile이나 타겟 (빌드 될 것)을 지정하지 않고 "make"라고 타이프하면 Make는 디폴트 메이크 파일 ("GNUMakefile", "makefile"또는 "Makefile")과 기본 타겟 (첫번째 makefile에 하나,이 경우 mydll.dll).