2014-07-05 2 views
1

Fortran 응용 프로그램에 대한 CMake 기반 컴파일 프로세스를 개발했습니다. 응용 프로그램은 현재 디렉토리에있는 여러 모듈 파일로 구성됩니다. 또한 tst이라는 테스트 디렉토리를 만들었습니다.이 디렉토리에는 응용 프로그램 모듈의 중요한 기능과 서브 루틴을 테스트하는 작은 프로그램이 들어 있습니다.여러 실행 파일이있는 CMake Fortran 프로젝트

Cmake가 테스트 프로그램을 올바르게 컴파일 할 수 없다는 점을 제외하면 모두 훌륭합니다. 현재 tst_inter_s이라는 테스트 프로그램이 하나만 있습니다. 컴파일되고 실행 파일이 생성되지만 실제 tst_inter_s을 컴파일하는 대신 Cmake는 기본 프로젝트 실행 파일을 선택하여 다시 컴파일하는 것처럼 보입니다. 메인 프로젝트 파일과 크기와 내용이 같습니다. CMakeLists 파일을 수정하는 데 도움을 주시면 감사하겠습니다. 아래에 게시됩니다.

CMakeLists.txt, 주요 디렉토리

# Minimum cmake version 
cmake_minimum_required(VERSION 2.8) 

# Project name 
project(hsg_1d Fortran) 

# Toolchain selection, possible arguments: Intel, gFortran 
SET(Toolchain Intel) 

# Compiler selection 
include(CMakeForceCompiler) 

# GNU compilers 
if(${Toolchain} MATCHES gFortran) 
    CMAKE_FORCE_Fortran_COMPILER(gfortran "gfortran") 
    CMAKE_FORCE_C_COMPILER(gcc "gcc") 
    CMAKE_FORCE_C_COMPILER(g++ "g++") 
endif(${Toolchain} MATCHES gFortran) 

# Intel compilers 
if(${Toolchain} MATCHES Intel) 
    CMAKE_FORCE_Fortran_COMPILER(ifort "Intel Fortran Compiler") 
    set(CMAKE_Fortran_FLAGS "-fpp -heap-arrays -g -O0 -traceback -check bounds ${CMAKE_Fortran_FLAGS}") 

    CMAKE_FORCE_C_COMPILER(icc "Intel C Compiler") 
    CMAKE_FORCE_CXX_COMPILER(icpc "Intel C++ Compiler") 
endif(${Toolchain} MATCHES Intel) 

# Test files 
ADD_SUBDIRECTORY(tst) 
SET(tst_exec tst_inter_s) 

# Source code files 
SET(src gaussian.F90 
     hsg_1d.F90 
     huygens.F90 
     init.F90 
     io.F90 
     inter.F90 
     mur.F90 
     pgm.F90 
     variables.F90 
     yee.F90) 

# Test executables 
ADD_EXECUTABLE(${tst_exec} ${src}) 

# Main executable 
ADD_EXECUTABLE(${PROJECT_NAME} ${src}) 

CMakeLists.txt,

# Test files 
SET(tst tst_inter_s.F90) 

내가 컴파일 표준 Makefile을 생성하기 위해 테스트 디렉토리 :

  1. 를 만들 비어있는 build 디렉토리
  2. 실행 cmake -G 'Unix Makefiles' ..build
  3. 유형 make에서 그들이 동일한 소스 파일로 구성되어 있기 때문에 hsg_1dtst_inter_s는, 동일 대상 및 테스트 실행을

답변

0

실행 파일을 컴파일 ${src}

ADD_EXECUTABLE(${tst_exec} ${src}) 
ADD_EXECUTABLE(${PROJECT_NAME} ${src}) 

하셨습니까 테스트 실행 파일에 tst 파일을 추가하는 것을 잊지 않으셨습니까?

ADD_EXECUTABLE(${tst_exec} ${src} ${tst}) 

또한 같은 소스 파일에 의존해야 ADD_EXECUTABLE(${tst_exec} ...)

+0

test/CMakeLists.txt에 테스트 실행 파일을 이동하는 것이 좋습니다. 이것이 소스 코드 모듈의 일부를 테스트하는 그들의 목표입니다. '$ {tst}'를'ADD_EXECUTABLE ($ {tst_exec} $ {src} $ {tst}) '에 추가하면 문제가 해결되지 않습니다. 'ADD_EXECUTABLE ($ {tst_exec} $ {src} $ {tst})'를'tst/CMakeLists.txt'로 옮기면'add_executable이 잘못된 인수의 수로 호출되었습니다 .'라는 오류가 발생합니다. 'tst/CMakeLists.txt'가'$ {src} '의 값을 알지 못하기 때문에 이런 경우라고 가정합니다. – mabalenk

+0

아마도'$ {tst}'가 main'CMakeLists.txt'에 정의되어 있지 않기 때문입니까? '$ {tst} '와'$ {src} 안에 무엇이 있는지를 디버깅하려면 [MESSAGE] (http://www.cmake.org/cmake/help/v2.8.12/cmake.html#command:message) 명령을 사용해보십시오. }'. – Peter

관련 문제