如何使用cmake生成两个二进制文件,一个在fortran中,一个在cxx中
我有一个库,它必须链接到两个主代码,一个在fortran中,另一个在cxx中 我在src/lib/CMakeLists.txt中有这个库: 在src/main/CMakeLists.txt中,我有: 在编译mymain1时,它使用CXX编译器来链接,而不是使用Fortran编译器如何使用cmake生成两个二进制文件,一个在fortran中,一个在cxx中,cmake,fortran,Cmake,Fortran,我有一个库,它必须链接到两个主代码,一个在fortran中,另一个在cxx中 我在src/lib/CMakeLists.txt中有这个库: 在src/main/CMakeLists.txt中,我有: 在编译mymain1时,它使用CXX编译器来链接,而不是使用Fortran编译器 我如何告诉cmake使用Fortran链接mymain1和CXX链接mymain2?您可能会直接影响用于链接属性的语言: 另一种方法是教CMake正确选择链接器 P>不使用库CGED,只从Fortran源编译,选择M
我如何告诉cmake使用Fortran链接mymain1和CXX链接mymain2?您可能会直接影响用于链接属性的语言: 另一种方法是教CMake正确选择链接器 <> P>不使用库CGED,只从Fortran源编译,选择MyMn1的Fortran链接器,MyMeN2的C++链接器,只从C++源编译。 但与库的链接会让CMake感到困惑:因为库mylib是从几种语言的源代码中编译而来的,所以CMake会使用一些语言的偏好分数为它选择链接器。更有可能的是,C++在你的情况下打败FORTRAN。 此外,当为mymain1选择链接器语言时,CMake会考虑静态库mylib的语言。因为C++的结果甚至胜于仅由FORTRAN源构建的可执行文件。 您可以使用以下变量禁用将库语言传播到可执行文件:
您可能会直接影响用于链接属性的语言: 另一种方法是教CMake正确选择链接器 <> P>不使用库CGED,只从Fortran源编译,选择MyMn1的Fortran链接器,MyMeN2的C++链接器,只从C++源编译。 但与库的链接会让CMake感到困惑:因为库mylib是从几种语言的源代码中编译而来的,所以CMake会使用一些语言的偏好分数为它选择链接器。更有可能的是,C++在你的情况下打败FORTRAN。 此外,当为mymain1选择链接器语言时,CMake会考虑静态库mylib的语言。因为C++的结果甚至胜于仅由FORTRAN源构建的可执行文件。 您可以使用以下变量禁用将库语言传播到可执行文件:
ADD_LIBRARY(mylib a.f90 b.c c.cc)
ADD_EXECUTABLE(mymain1 mymain1.f90)
TARGET_LINK_LIBRARIES(mymain1 mylib)
ADD_EXECUTABLE(mymain2 mymain2.cc)
TARGET_LINK_LIBRARIES(mymain2 mylib)
# Use Fortran compiler for link 'mymain1' executable
set_target_properties(mymain1 PROPERTIES LINKER_LANGUAGE Fortran)
# <place this *before* adding executables>
# Do not propagate language of C++ libraries to the executables.
set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES OFF)