2013-04-30 4 views
0

make 파일을 만드는 것은 이번이 처음입니다. 필자의 Fortran 코드는 C 소스 파일에 정의 된 일부 함수를 사용하기 때문에 약간 혼란 스럽습니다. 이것은 지금까지 작성한 내용입니다.메이크 파일과 Fortran과 C의 혼동

 CC = icc 
     FC = ifort 
     FCFLAGS = -O3 -xHost -fno-alias$(INCLUDES) 
     CFLAGS = -O3 -xHost -fno-alias$(INCLUDES) 
     LIBS = 
     INCLUDES = 
     TARGET = run 
     OBJS: pi.o\ 
     timing.o 
     timing.o: timing.c timing.h 
    $(CC) -c $(CFLAGS) timing.c 
      pi.o: pi.f90 timing.c timing.h 
     $(FC) -c $(FCFLAGS) timing.o pi.f90 
      .PHONY : clean 
      clean: rm -f *.o 

올바른 트랙에 있습니까?

+0

항상 태그 [tag : fortran]을 사용하고 질문이 구체적이라는 것을 구별하기 위해 필요한 경우에만 버전을 추가하십시오. 예를 들어 포트란 2008을 사용할 수는 없지만 포트란 90 만 사용할 수 있습니다. –

답변

0

pi.otiming.o이 아니라 timing.c timing.h이 필요하므로 fortran 제조법에서 두 개를 바꿔 넣으십시오. 다음과 같아야합니다

pi.o: pi.f90 timing.o 
     $(FC) -c $(FCFLAGS) timing.o pi.f90 
+0

답변 해 주셔서 감사합니다. 당신이 언급 한 요점 이외에 메이크 파일은 합리적으로 보이나요? – gmajal

+0

전 Fortran과 C를 결합하려고하지 않았습니다. 예제 ([fortran with c] 검색)를 찾으려고 할 때 각 오브젝트 파일 (* .o)을 컴파일 한 다음 실행 파일로 컴파일하는 것이 좋습니다. 내가 찾을 수있는 최고의 참조 : http://www.yolinux.com/TUTORIALS/LinuxTutorialMixingFortranAndC.html "FORTRAN 프로그램에서 C 함수를 호출"을 검색합니다. – Greg

1

당신은 당신의 메이크에 문제의 번호를 가지고 있고, 게다가 다른 .o 파일을 컴파일 할 때 당신은 .o 파일을 포함 할 수 없습니다. .o 파일은 링커에게만 보내지 만 ifort에 대한 플래그는 -c을 사용하여 객체를 생성하고 이 아니고이 링크됩니다. BTW, 예를 제대로 형식화하면 질문을 이해하는 데 도움이됩니다. 공백 문자는 읽기가 어려워서 이상합니다.

나는 이런 식으로하고 싶다고 생각합니다. 이것은 "run"이라는 프로그램을 만듭니다.

CC = icc 
FC = ifort 
FCFLAGS = -O3 -xHost -fno-alias $(INCLUDES) 
CFLAGS = -O3 -xHost -fno-alias $(INCLUDES) 
LIBS = 
INCLUDES = 
TARGET = run 
OBJS = pi.o timing.o 

$(TARGET) : $(OBJS) 
     $(FC) -o $(TARGET) $(OBJS) 
timing.o: timing.c timing.h 
     $(CC) -c $(CFLAGS) timing.c 
pi.o: pi.f90 
     $(FC) -c $(FCFLAGS) pi.f90 
.PHONY : clean 
clean: 
     rm -f *.o 

또는, 메이크업 좀 더 멋진 기능을 사용하고 입력을 피하려는 경우, 당신은 사용할 수 있습니다

CC = icc 
FC = ifort 
FCFLAGS = -O3 -xHost -fno-alias $(INCLUDES) 
CFLAGS = -O3 -xHost -fno-alias $(INCLUDES) 
LIBS = 
INCLUDES = 
TARGET = run 
SRCS = pi.f90 timing.c 

timing.o: timing.h 

OBJS = $(addsuffix .o,$(basename $(SRCS)) 

$(TARGET) : $(OBJS) 
     $(FC) -o [email protected] $^ 
%.o: %.c 
     $(CC) -c $(CFLAGS) -o [email protected] $< 
%.o: %.f90 
     $(FC) -c $(FCFLAGS) -o [email protected] $< 

.PHONY : clean 
clean: 
     rm -f *.o 

이 더 오래 보이지만, 당신은 더 많은 소스 파일을 추가 할 때/경우 SRCS 변수에 넣기 만하면됩니다 (추가 선행 조건을 선언하십시오).