Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用cmake生成两个二进制文件,一个在fortran中,一个在cxx中_Cmake_Fortran - Fatal编程技术网

如何使用cmake生成两个二进制文件,一个在fortran中,一个在cxx中

如何使用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

我有一个库,它必须链接到两个主代码,一个在fortran中,另一个在cxx中

我在src/lib/CMakeLists.txt中有这个库:

在src/main/CMakeLists.txt中,我有:

在编译mymain1时,它使用CXX编译器来链接,而不是使用Fortran编译器


我如何告诉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)