cmake - 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)
解决方案
推荐阅读
- php - 我在 cron 作业中不断收到 HTTP 500 错误,同时它使用 ci3 中的电子邮件类在循环中发送电子邮件
- windows - 未为所有用户显示凭据提供程序(包括其他用户)
- javascript - 如何找到数组中第一个重复项的索引?
- python - 将df转换回熊猫的Rpy2问题
- regex - 如何在 Visual Studio Code 的代码片段中使用正则表达式“大写和替换”?
- jquery - BxSlider 没有在谷歌浏览器中显示图像
- python - 如何从其他 2 个列表中创建元素列表
- macos - MacOS的TTrayIcon?
- flutter - 如何捕捉颤动的 video_player 插件错误?
- excel - 如何在列中查找多个值并返回结果?我尝试使用数组公式,但它导致 Excel 渲染速度太慢