首页 > 解决方案 > Can not set the compiler flags for Fortran using Cmake

问题描述

I would like to use CMake to build fortran source codes. I use this command set(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -Wextra -g -O -Wall -Warray-temporaries -Wconversion -fimplicit-none -fbacktrace -ffree-line-length-0 -fcheck=all -finit-real=nan -ffpe-trap=zero,invalid,overflow,underflow") to set up compiler flags for debugging but it didn't work. So what is right way to set up the flags for compiling fortran code? I used the cmake version 3.17.0, GNU Fortran (Debian 9.3.0-20) 9.3.0 and Debian testing. The full CMakeLists is

project(Simcoflow Fortran)
find_package(MPI REQUIRED)
set(Fortran_COMPILER_FLAGS "-w")
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -w")
set(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -Wextra -g -O -Wall -Warray-temporaries -Wconversion -fimplicit-none -fbacktrace -ffree-line-length-0 -fcheck=all -finit-real=nan -ffpe-trap=zero,invalid,overflow,underflow")
set(CMAKE_BUILD_TYPE DEBUG)
set(HYPRE_INCLUDE_DIR /usr/include/hypre)
set(${PROJECT_NAME}_INCLUDE_DIR)
set(HYPRE_LIBRARIES /usr/lib/libHYPRE.so /usr/lib/libHYPRE_FEI.so /usr/lib/libHYPRE_struct_mv.so /usr/lib/libHYPRE_IJ_mv.so /usr/lib/libHYPRE_parcsr_ls.so)
set(HYPRE_LIBRARIES /usr/lib/x86_64-linux-gnu/libHYPRE_core.so /usr/lib/x86_64-linux-gnu/libHYPRE.so /usr/lib/x86_64-linux-gnu/libHYPRE_FEI.so)
include_directories(${MPI_Fortran_INCLUDE_PATH} ${HYPRE_INCLUDE_DIR} ${Simcoflow_INCLUDE_DIR})
link_directories(${MPI_Fortran_LIBRARIES})
#aux_source_directory(. SRC_LIST)
list(APPEND SRC_LIST
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/third_party/BeFoR64/src/lib/befor64.F90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/third_party/BeFoR64/src/lib/befor64_pack_data_m.F90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/third_party/FoXy/src/lib/foxy.f90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/third_party/FoXy/src/lib/foxy_xml_file.f90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/third_party/FoXy/src/lib/foxy_xml_tag.F90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/third_party/PENF/src/lib/penf_b_size.F90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/third_party/PENF/src/lib/penf.F90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/third_party/PENF/src/lib/penf_global_parameters_variables.F90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/third_party/PENF/src/lib/penf_stringify.F90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/third_party/StringiFor/src/lib/stringifor.F90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/third_party/StringiFor/src/lib/stringifor_string_t.F90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/lib/vtk_fortran_dataarray_encoder.f90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/lib/vtk_fortran.f90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/lib/vtk_fortran_parameters.f90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/lib/vtk_fortran_pvtk_file.f90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/lib/vtk_fortran_vtk_file.f90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/lib/vtk_fortran_vtk_file_xml_writer_abstract.f90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/lib/vtk_fortran_vtk_file_xml_writer_appended.f90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/lib/vtk_fortran_vtk_file_xml_writer_ascii_local.f90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/lib/vtk_fortran_vtk_file_xml_writer_binary_local.f90
   ${CMAKE_CURRENT_LIST_DIR}/VTKFortran/src/lib/vtk_fortran_vtm_file.F90 
   ${CMAKE_CURRENT_LIST_DIR}/Solver.f90
   ${CMAKE_CURRENT_LIST_DIR}/Precision.f90
   ${CMAKE_CURRENT_LIST_DIR}/MPI.f90
   ${CMAKE_CURRENT_LIST_DIR}/Mesh.f90
   ${CMAKE_CURRENT_LIST_DIR}/Matrix.f90
   ${CMAKE_CURRENT_LIST_DIR}/CutCell.f90 
   ${CMAKE_CURRENT_LIST_DIR}/Clsvof.f90
   ${CMAKE_CURRENT_LIST_DIR}/PrintResult.f90 
   ${CMAKE_CURRENT_LIST_DIR}/PredictUVW.f90
   ${CMAKE_CURRENT_LIST_DIR}/ProjectionP.f90 
   ${CMAKE_CURRENT_LIST_DIR}/ComputePUVW.f90
   ${CMAKE_CURRENT_LIST_DIR}/StateVariables.f90
   ${CMAKE_CURRENT_LIST_DIR}/Constants.f90
   ${CMAKE_CURRENT_LIST_DIR}/BoundaryInterface.f90
   ${CMAKE_CURRENT_LIST_DIR}/BoundaryFunction.f90
   ${CMAKE_CURRENT_LIST_DIR}/STL.f90
   ${CMAKE_CURRENT_LIST_DIR}/Geometry.f90
   ${CMAKE_CURRENT_LIST_DIR}/VTK_mod.f90
   ${CMAKE_CURRENT_LIST_DIR}/VTR_mod.f90)

set (LINK_LIBS ${LINK_LIBS} 
    ${MPI_Fortran_LIBRARIES}
    ${HYPRE_LIBRARIES}
    )
list(APPEND SRC_LIST_MAIN
    ${SRC_LIST}
    Main.f90)
add_executable(${PROJECT_NAME} ${SRC_LIST_MAIN})
target_link_libraries(${PROJECT_NAME} ${LINK_LIBS})
    
add_subdirectory(Test)

标签: cmakefortrangfortran

解决方案


推荐阅读