我正在尝试使用一个外部模块为我的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。
答案 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/