首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Fortran_COMPILER_ID CMake生成器表达式的逼近

Fortran_COMPILER_ID CMake生成器表达式的逼近
EN

Stack Overflow用户
提问于 2017-03-29 18:18:47
回答 1查看 324关注 0票数 1

我正在(试图)利用CMake的生成器表达式来支持基于编译器供应商的generation-time编译器标志配置。

不幸的是,虽然相关的文档描述了如何在C和C++项目中完成(分别参见C_COMPILER_IDCXX_COMPILER_ID逻辑表达式),但没有提到Fortran类似物。

我已经确认没有Fortran_COMPILER_ID生成器表达式,它在使用时会发出以下错误:

代码语言:javascript
运行
复制
CMake Error at CMakeLists.txt:<line number> (target_compile_options):
  Error evaluating generator expression:

    $<Fortran_COMPILER_ID:GNU>

  Expression did not evaluate to a known generator expression

对于Fortran项目,是否有可能近似这种行为?

编辑:

期望行为的最小示例

代码语言:javascript
运行
复制
cmake_minimum_required( VERSION 3.2 ) 

project( myProject LANGUAGES Fortran )

set( fortran_module_directory "${CMAKE_BINARY_DIR}/modules" CACHE PATH "directory for fortran modules" )
file( MAKE_DIRECTORY ${fortran_module_directory} ) 
set( CMAKE_Fortran_MODULE_DIRECTORY ${fortran_module_directory} )

set( myProject_GNU_DEBUG_flags "flag1" "flag2" )
set( myProject_GNU_RELEASE_flags "flag3" "flag4" )
set( myProject_Intel_DEBUG_flags "flag5" "flag6")
set( myProject_Intel_RELEASE_flags "flag7" "flag8" )
# other compilers    

add_library( myProject STATIC 
             ${CMAKE_CURRENT_SOURCE_DIR}/src/mySource.f90
             ${CMAKE_CURRENT_SOURCE_DIR}/src/myOtherSource.f90 )

target_include_directories( myProject PUBLIC ${fortran_module_directory} )

target_compile_options( njoy PRIVATE 
$<$<Fortran_COMPILER_ID:GNU>:
    $<$<CONFIG:Debug>:${myProject_GNU_DEBUG_flags}>>
    $<$<CONFIG:Release>:${myProject_GNU_RELEASE_flags}>>>
$<$<Fortran_COMPILER_ID:Intel>:
    $<$<CONFIG:Debug>:${myProject_Intel_DEBUG_flags}>>
    $<$<CONFIG:Release>:${myProject_Intel_RELEASE_flags}>>>
# other compilers
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-05 13:55:27

我在HDF5 CMakeLists.txt的灵感中找到了一种可行的方法。例如:

代码语言:javascript
运行
复制
set (Fortran_COMPILER_ID CMAKE_Fortran_COMPILER_ID)

target_link_libraries(target PUBLIC
  $<$<STREQUAL:"${Fortran_COMPILER_ID}","GNU">:"-lgfortran">
  $<$<STREQUAL:"${Fortran_COMPILER_ID}","Intel">:"-lifcore">
  )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43101175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档