CMakeでFortranモジュールファイルが見つかりません

クリス

ライブラリとしてサブディレクトリを持つFortranの分割プロジェクトがあります。

# ./CMakeLists.txt
cmake_minimum_required (VERSION 2.8)
project (Simulation Fortran)
enable_language(Fortran)

add_subdirectory(lib)

add_executable(Simulation main.f90)
include_directories(lib)
add_dependencies(Simulation physicalConstants)
target_link_libraries(Simulation physicalConstants)

ルートディレクトリには、Fortranソースコードファイルが1つだけ含まれています。

! ./main.f90:

program simulation
use physicalConstants

implicit none

write(*,*) "Boltzmann constant:", k_b

end program simulation

そして私のサブディレクトリにlibCMakeLists.txt、Fortranモジュールのソースファイルだけでなく別のファイルも含まれています。

# ./lib/CMakeLists.txt:

cmake_minimum_required (VERSION 2.8)
enable_language(Fortran)

project(physicalConstants)
add_library( physicalConstants SHARED physicalConstants.f90)
! ./lib/physicalConstants.f90:

module physicalConstants
implicit none
save

real, parameter :: k_B = 1.38e-23

end module physicalConstants

cmakeを使って作ってみました。Makephysicalconstants.modlibディレクトリにを生成しますが、このファイルは次のビルドプロセス中に見つかりませんmain.f90.o

Fatal Error: Can't open module file 'physicalconstants.mod' for reading at (1): No such file or directory

ここで何が欠けていますか?

アンゲヴァンテはもはやSOを誇りに思っていません

ターゲットAがターゲットBのモジュールを正常に使用するには、Bがモジュールファイルを格納するディレクトリがAのインクルードディレクトリの中にある必要があります。

バリアント1

これを実現する1つの方法はFortran_MODULE_DIRECTORY、ターゲットBにプロパティを設定してから、そのプロパティのコンテンツを追加してAのディレクトリを含めることです。

あなたは古代のCMake2.8.0をサポートすると主張しています。そこでは、次のようなことをする必要があります。

add_executable(Simulation main.f90)
include_directories(lib)
# note that add_dependencies call is not necessary when you're actually linking
target_link_libraries(Simulation physicalConstants)
get_property(moduleDir TARGET physicalConstants PROPERTY Fortran_MODULE_DIRECTORY)
include_directories(${moduleDir})

より現代的なCMakeでは、代わりにこれを行うことができます:

add_executable(Simulation main.f90)
include_directories(lib)
target_link_libraries(Simulation physicalConstants)
target_include_directories(Simulation PUBLIC $<TARGET_PROPERTY:physicalConstants,Fortran_MODULE_DIRECTORY>)

そのための関数を作成することもできます。

function(LinkFortranLibraries Target)
  target_link_libraries(Target ${ARGN})
  foreach(Lib IN LISTS ARGN)
    target_include_directories(Simulation PUBLIC $<TARGET_PROPERTY:${Lib},Fortran_MODULE_DIRECTORY>)
  endforeach()
endfunction()

そして、次のように使用します。

add_executable(Simulation main.f90)
include_directories(lib)
LinkFortranLibraries(Simulation physicalConstants)

バリアント2

Fortran_MODULE_DIRECTORYプロパティを使用しない場合、モジュールファイルはそれらを生成するターゲットのソースディレクトリに対応するバイナリディレクトリに保存されます。これは、ターゲットのプロパティから取得できます。これは、バリアント1とBINARY_DIRまったく同じようFortran_MODULE_DIRECTORY使用できます

ただし、CMake 2.8.0はターゲットプロパティをサポートしていないため、BINARY_DIRその値を手動で「再構築」する必要があります。

add_executable(Simulation main.f90)
include_directories(lib ${CMAKE_CURRENT_BINARY_DIR}/lib)
target_link_libraries(Simulation physicalConstants)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

CMakeがCUDAを見つけることができません: "cmakeモジュールファイルが見つかりませんでした:CMakeDetermineCUDACompiler.cmake"

分類Dev

モジュールファイルが見つかりません

分類Dev

Electronでローカルモジュール(jsファイル)が見つかりません

分類Dev

.scssファイルでフローモジュールが見つかりません

分類Dev

モジュール 'react-redux'の宣言ファイルが見つかりませんでした。

分類Dev

モジュール 'react-redux'の宣言ファイルが見つかりませんでした。

分類Dev

モジュールの宣言ファイルが見つかりませんでした

分類Dev

モジュール 'react-native-foo-package'の宣言ファイルが見つかりませんでした

分類Dev

モジュール './router'の宣言ファイルが見つかりませんでした

分類Dev

TS7016:モジュール 'vue-timers'の宣言ファイルが見つかりませんでした

分類Dev

モジュール 'vuetify / lib / framework'の宣言ファイルが見つかりませんでした

分類Dev

モジュールのコンパイル:asm / linkage.hファイルが見つかりません

分類Dev

.jsxファイルのインポート時にモジュールが見つかりません

分類Dev

モジュールにAndroidファセットが見つかりません

分類Dev

リングクレートをコンパイルできません:モジュール `montgomery`のファイルが見つかりません

分類Dev

テストファイルからモジュール@ionic / angular(ionic 4)が見つかりません

分類Dev

エクスプレスエラー-モジュールが見つかりません-静的ファイル

分類Dev

エラー:ファイルの解析中にモジュール './definitions/init'が見つかりません

分類Dev

React-native 0.57ios制限ファイルが見つかりませんモジュールCoreFoundationをビルドできませんでした

分類Dev

カルマとCSSファイル:「モジュールが見つかりません:エラー:解決できません」

分類Dev

ファイルを指しているモジュールが見つかりません

分類Dev

Python:モジュールディレクトリにファイルが見つかりません

分類Dev

Ansible get_urlモジュール:ファイルのチェックサムが見つかりません

分類Dev

spark-pythonファイルを送信し、モジュールが見つかりません

分類Dev

モジュール "。"が見つかりません webpackMissingModuleで

分類Dev

Electronでモジュールが見つかりません

分類Dev

Reactでモジュールが見つかりません

分類Dev

モジュール「fs」が見つかりません-webpackMissingModuleで

分類Dev

Nodejsでモジュールが見つかりません

Related 関連記事

  1. 1

    CMakeがCUDAを見つけることができません: "cmakeモジュールファイルが見つかりませんでした:CMakeDetermineCUDACompiler.cmake"

  2. 2

    モジュールファイルが見つかりません

  3. 3

    Electronでローカルモジュール(jsファイル)が見つかりません

  4. 4

    .scssファイルでフローモジュールが見つかりません

  5. 5

    モジュール 'react-redux'の宣言ファイルが見つかりませんでした。

  6. 6

    モジュール 'react-redux'の宣言ファイルが見つかりませんでした。

  7. 7

    モジュールの宣言ファイルが見つかりませんでした

  8. 8

    モジュール 'react-native-foo-package'の宣言ファイルが見つかりませんでした

  9. 9

    モジュール './router'の宣言ファイルが見つかりませんでした

  10. 10

    TS7016:モジュール 'vue-timers'の宣言ファイルが見つかりませんでした

  11. 11

    モジュール 'vuetify / lib / framework'の宣言ファイルが見つかりませんでした

  12. 12

    モジュールのコンパイル:asm / linkage.hファイルが見つかりません

  13. 13

    .jsxファイルのインポート時にモジュールが見つかりません

  14. 14

    モジュールにAndroidファセットが見つかりません

  15. 15

    リングクレートをコンパイルできません:モジュール `montgomery`のファイルが見つかりません

  16. 16

    テストファイルからモジュール@ionic / angular(ionic 4)が見つかりません

  17. 17

    エクスプレスエラー-モジュールが見つかりません-静的ファイル

  18. 18

    エラー:ファイルの解析中にモジュール './definitions/init'が見つかりません

  19. 19

    React-native 0.57ios制限ファイルが見つかりませんモジュールCoreFoundationをビルドできませんでした

  20. 20

    カルマとCSSファイル:「モジュールが見つかりません:エラー:解決できません」

  21. 21

    ファイルを指しているモジュールが見つかりません

  22. 22

    Python:モジュールディレクトリにファイルが見つかりません

  23. 23

    Ansible get_urlモジュール:ファイルのチェックサムが見つかりません

  24. 24

    spark-pythonファイルを送信し、モジュールが見つかりません

  25. 25

    モジュール "。"が見つかりません webpackMissingModuleで

  26. 26

    Electronでモジュールが見つかりません

  27. 27

    Reactでモジュールが見つかりません

  28. 28

    モジュール「fs」が見つかりません-webpackMissingModuleで

  29. 29

    Nodejsでモジュールが見つかりません

ホットタグ

アーカイブ