具有多个可执行文件的CMake Fortran项目

时间:2014-07-05 15:40:58

标签: cmake fortran executable fortran90

我为Fortran应用程序开发了基于CMake的编译过程。该应用程序由放置在当前目录中的多个模块文件组成。我还创建了一个名为tst的测试目录,其中包含测试应用程序模块中重要功能和子程序的小程序。

一切都很好,除了我无法让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)

为编译I生成标准Makefile:

  1. 创建一个空的build目录
  2. cmake -G 'Unix Makefiles' ..
  3. 运行build
  4. 键入make以编译目标和测试可执行文件

1 个答案:

答案 0 :(得分:0)

可执行文件hsg_1dtst_inter_s相同,因为它们包含相同的源文件${src}

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

您是否忘记将tst个文件添加到测试可执行文件中?

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

另请考虑将ADD_EXECUTABLE(${tst_exec} ...)移至test/CMakeLists.txt