Fix Intel and MinGW Fortran DLL import libraries
We add Intel and MinGW Fortran linker options to create the import library portion of a DLL. This allows other binaries to link to a Fortran DLL. We also update the Fortran test to use a .def file to specify exports since there is no __declspec(dllexport) markup syntax in Fortran.
This commit is contained in:
parent
7b28fbd656
commit
707d05e936
|
@ -20,4 +20,5 @@ SET (CMAKE_Fortran_FLAGS_MINSIZEREL_INIT "-O1")
|
||||||
SET (CMAKE_Fortran_FLAGS_RELEASE_INIT "-O2")
|
SET (CMAKE_Fortran_FLAGS_RELEASE_INIT "-O2")
|
||||||
SET (CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT "-02 -g")
|
SET (CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT "-02 -g")
|
||||||
|
|
||||||
|
SET(CMAKE_Fortran_CREATE_SHARED_LIBRARY
|
||||||
|
"<CMAKE_Fortran_COMPILER> <CMAKE_SHARED_LIBRARY_Fortran_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS> -o <TARGET> -Wl,--out-implib,<TARGET_IMPLIB> ${CMAKE_GNULD_IMAGE_VERSION} <OBJECTS> <LINK_LIBRARIES>")
|
||||||
|
|
|
@ -12,7 +12,7 @@ SET(CMAKE_Fortran_MODDIR_FLAG "-module:")
|
||||||
SET(CMAKE_Fortran_USE_RESPONSE_FILE_FOR_OBJECTS 1)
|
SET(CMAKE_Fortran_USE_RESPONSE_FILE_FOR_OBJECTS 1)
|
||||||
|
|
||||||
SET(CMAKE_Fortran_CREATE_SHARED_LIBRARY
|
SET(CMAKE_Fortran_CREATE_SHARED_LIBRARY
|
||||||
"link ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /dll <LINK_FLAGS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
|
"link ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /dll <LINK_FLAGS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
|
||||||
|
|
||||||
SET(CMAKE_Fortran_CREATE_SHARED_MODULE ${CMAKE_Fortran_CREATE_SHARED_LIBRARY})
|
SET(CMAKE_Fortran_CREATE_SHARED_MODULE ${CMAKE_Fortran_CREATE_SHARED_LIBRARY})
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ SET(CMAKE_Fortran_COMPILE_OBJECT
|
||||||
SET(CMAKE_COMPILE_RESOURCE "rc <FLAGS> /fo<OBJECT> <SOURCE>")
|
SET(CMAKE_COMPILE_RESOURCE "rc <FLAGS> /fo<OBJECT> <SOURCE>")
|
||||||
|
|
||||||
SET(CMAKE_Fortran_LINK_EXECUTABLE
|
SET(CMAKE_Fortran_LINK_EXECUTABLE
|
||||||
"<CMAKE_Fortran_COMPILER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} <FLAGS> /Fe<TARGET> -link <CMAKE_Fortran_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
|
"<CMAKE_Fortran_COMPILER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} <FLAGS> /Fe<TARGET> -link /implib:<TARGET_IMPLIB> <CMAKE_Fortran_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
|
||||||
|
|
||||||
INCLUDE(Platform/Windows-Intel)
|
INCLUDE(Platform/Windows-Intel)
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ message("CMAKE_Fortran_COMPILER = ${CMAKE_Fortran_COMPILER}")
|
||||||
message("CMAKE_Fortran_FLAGS = ${CMAKE_Fortran_FLAGS}")
|
message("CMAKE_Fortran_FLAGS = ${CMAKE_Fortran_FLAGS}")
|
||||||
|
|
||||||
add_library(hello STATIC hello.f)
|
add_library(hello STATIC hello.f)
|
||||||
add_library(world SHARED world.f)
|
add_library(world SHARED world.f world.def)
|
||||||
add_executable(testf testf.f)
|
add_executable(testf testf.f)
|
||||||
target_link_libraries(testf hello world)
|
target_link_libraries(testf hello world)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
EXPORTS
|
||||||
|
WORLD
|
Loading…
Reference in New Issue