cmake可以自动添加fortran预处理器-cpp标志吗?

Posted

技术标签:

【中文标题】cmake可以自动添加fortran预处理器-cpp标志吗?【英文标题】:Can cmake automatically add fortran preprocessor -cpp flag? 【发布时间】:2019-06-04 16:17:25 【问题描述】:

我有一些带有预处理器指令的 fortran 源代码。我通常在 Makefile 中使用ifort -cpp -DOPT1 -DOPT2 ... 编译它们。现在我正在尝试更改为 cmake,并添加这些选项我使用target_compile_definitions(target PUBLIC OPT1)。但是当我运行编译时,该命令只显示ifort -DOPT1 -DOPT2 ...,因此失败了。

我读过一些编译器默认设置了这个标志,比如 gfortran:

-cpp
-nocpp  Enable preprocessing. The preprocessor is automatically invoked if
        the file extension is .fpp, .FPP, .F, .FOR, .FTN, .F90, .F95, .F03
        or .F08. Use this option to manually enable preprocessing of any 
        kind of Fortran file.

但看起来这不是 ifort 的明确情况:

-cpp   Runs the Fortran preprocessor on source files prior
       to compilation (same as the -fpp option).

我是否在 cmake 中错过了添加此标志的选项?如果不是,使用 cmake 命令手动添加它的正确方法是什么?

谢谢!

【问题讨论】:

add_compile_options(-cpp) ? 您可以使用target_compile_options(target PUBLIC -cpp)提供特定于目标的编译选项。 好的,谢谢,所以我仍然需要先对其进行硬编码。我将使用带有target_ 的那个来保持“以目标为中心”。 我会提醒您,有些晦涩的编译器 -cpp 不是正确的标志。我建议在设置标志之前检查编译器是否为 intel,或者仅在它工作时使用 try_compile 命令设置它。 【参考方案1】:

如果您有 CMake 3.18 或更高版本,请使用 Fortran_PREPROCESS 属性:

set_source_files_properties(
  file1.fpp file2.fpp
  PROPERTIES Fortran_PREPROCESS ON
)

【讨论】:

以上是关于cmake可以自动添加fortran预处理器-cpp标志吗?的主要内容,如果未能解决你的问题,请参考以下文章

CMake c++ 库链接

从 fortran 代码中清除预处理器条件

Fortran 预处理器指令用法

力学 Fortran 预处理器

CMake:将Fortran与静态C库链接失败

用于从 FORTRAN 代码调用的 C++ 函数调用 C++ 代码的 Cmake 配置文件