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을 생성하기 위해 테스트 디렉토리 :
- 를 만들 비어있는
build
디렉토리 - 실행
cmake -G 'Unix Makefiles' ..
build
- 유형
make
에서 그들이 동일한 소스 파일로 구성되어 있기 때문에hsg_1d
및tst_inter_s
는, 동일 대상 및 테스트 실행을
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아마도'$ {tst}'가 main'CMakeLists.txt'에 정의되어 있지 않기 때문입니까? '$ {tst} '와'$ {src} 안에 무엇이 있는지를 디버깅하려면 [MESSAGE] (http://www.cmake.org/cmake/help/v2.8.12/cmake.html#command:message) 명령을 사용해보십시오. }'. – Peter