이전 포스팅에서는 F77_ZMQ를 gfortran을 이용한 Linking에 대해서 다루었다.
https://minosauce.tistory.com/16
[zeroMQ] F77_ZMQ Linking using gfortran (6)
이전 포스팅에서는 F77_ZMQ의 설치에 대해서 다루었다. https://minosauce.tistory.com/8 [zeroMQ] F77_ZMQ 설치 (5)이전 포스트에서 zeroMQ를 이미 설치했다는 가정하에 다음을 진행한다. https://minosauce.tistory.com/5
minosauce.tistory.com
이번 포스팅에서는 F77_ZMQ를 CMake을 이용한 Linking에 대해서 다룬다.
포트란 파일에 F77_ZMQ를 연동하기 위해서는 포트란 파일과 f77_zmq.h 그리고 libf77zmq.so 파일을 linking 시켜 하나의 obj 파일(.so or .dll)로 만들어야 한다.
이전 포스팅에서는 이 linking 과정을 gfortran을 통해 달성하였다.
(build) gfortran -o $(TargetName [.so]) $(Obj [.F77]) -lzmq -lf77zmq
( ex. gfortran -o Mytest Mytest.F90 -lzmq -lf77zmq)
-lzmq 는 기본 zeromq의 동적라이브러리 파일인 zmq.so 지칭하고 -lf77zmq는 libf77zmq.so를 지칭한다.
우리는 위 과정을 cmake을 통해서도 똑같이 구현할 수 있다.
CmakeLists.txt
add_library(MT src/Mytest.F90)
target_link_libraries(MT -lzmq -lf77zmq)
set_target_properties(MT PROPERTIES PREFIX "" SUFFIX ".so")
# set_target_properties(MT PROPERTIES PREFIX "" SUFFIX ".dll")
# 동적라이브러리를 .so파일로 생성할 것인가 .dll 파일로 생성할 것인가 선택할 수 있다.
install(TARGETS MT
#EXPORT "${CMAKE_PROJECT_NAME}Libraries"
DESTINATION "$Where/you/want/to/install/)
끝으로, zmq.h 헤더파일을 Mytest.F90 파일과 동일한 디렉토리에 저장한다.
여담으로,
zeroMQ를 이용한 Fortran 통신을 하게 된 이유는 NREL에서 개발한 풍력발전단지 시뮬레이터인 FAST.Farm과 python간의 데이터 교환을 위해서이다.
OpenFAST
Organization for OpenFAST-related repositories including whole-turbine and full wind farm simulation tools. - OpenFAST
github.com
FAST.Farm의 사용자인터페이스인 SuperController (SC_DLL.f90) 에 제어명령을 주기 위해서 파이썬과의 통신이 필요하였다.
FAST.Farm의 SC와 파이썬간의 연동을 원한다면 CMake에 다음과 같이 작성하면 된다.
add_library(SC_DLL src/SC_DLL.F90)
target_link_libraries(SC_DLL -lzmq -lf77zmq)
set_target_properties(SC_DLL PROPERTIES PREFIX "" SUFFIX ".dll")
#set_target_properties(SC_DLL PROPERTIES PREFIX "" SUFFIX ".so")
install(TARGETS SC_DLL
#EXPORT "${CMAKE_PROJECT_NAME}Libraries"
DESTINATION "${CMAKE_CURRENT_LIST_DIR}/../../reg_tests/r-test/glue-codes/fast-farm/5MW_Baseline/ServoDat")
감사합니다.
'공부 > 프로그래밍' 카테고리의 다른 글
[Julia] 대용량 데이터 효율적으로 처리하기: MATLAB과 Julia 비교 (0) | 2024.07.11 |
---|---|
[Julia] 로컬 패키지 만드는 법 (0) | 2024.07.09 |
[ubuntu] HDD 마운트 하는 법 (0) | 2023.11.03 |
[zeroMQ] F77_ZMQ Linking using gfortran (6) (0) | 2023.01.15 |
[zeroMQ] F77_ZMQ 설치 (5) (0) | 2023.01.03 |
댓글