带有模块和外部库的Fortran程序的cmake

时间:2013-02-14 16:59:43

标签: cmake fortran

我正在尝试使用一个外部模块为我的Fortran项目编写一个cmake列表,并且两者都必须与没有任何cmake find(findlib)包的外部库链接。到目前为止,我的CMakeLists.txt看起来像这样:

cmake_minimum_required (VERSION 2.6)

project (Project 1)

enable_language (C Fortran)

set(extern_INCLUDE /home/path/lib/libdir/include/)
set(extern_LIB /home/path/lib/libdir/lib)
include_directories(${extern_INCLUDE})
link_directories (${extern_LIB})

add_library(mymodule STATIC mymodule.f90)
set(main-source_SRC main-source.f)
add_executable(main-source ${main-source_SRC})
#the name of the external library located in /home/path/lib/libdir/lib is    libexternlib.so
target_link_libraries(main-source mymodule externlib) 

创建libmymodule.a并且绝对没有必要(或者就此而言是共享的)。我不想生成它们。我怎样才能避免它的生成并仍然编译mymodule,生成.o和.mod以便能够与主程序和外部lib链接?相当于ifort -c到mymodule和ifort到所有.o。

2 个答案:

答案 0 :(得分:0)

您拥有mymodule的来源。您可以在mymodule.f90中加入main-source_SRC。那应该够了。我希望以下工作,但我无法测试。

cmake_minimum_required (VERSION 2.6)

project (Project 1)

enable_language (C Fortran)

set(extern_INCLUDE /home/path/lib/libdir/include/)
set(extern_LIB /home/path/lib/libdir/lib)
include_directories(${extern_INCLUDE})
link_directories (${extern_LIB})

set(main-source_SRC main-source.f mymodule.f90)
add_executable(main-source ${main-source_SRC})
#the name of the external library located in /home/path/lib/libdir/lib is    libexternlib.so
target_link_libraries(main-source externlib) 

答案 1 :(得分:0)

文件libmymodule.a是一个静态库,并且是因为add_library()函数中的STATIC选项告诉CMake这样做而创建的。而不是STATIC,尝试使用SHARED来创建共享库libmymodule.so - 虽然我不确定它是你在这里担心的静态位。

如果外部库没有FindLib文件,可能很容易自己创建一个。 CMakeFiles包的FindLibs /目录中有许多示例,它提供示例CMake文件,特别是Fortran项目: http://cmakefiles.sf.net/