我为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:
build
目录cmake -G 'Unix Makefiles' ..
build
make
以编译目标和测试可执行文件答案 0 :(得分:0)
可执行文件hsg_1d
和tst_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