Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.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
混合C++;和Fortran 在C++和FORTRAN?< /强> 中有没有使用CLAN编译器的方法?_C++_Cmake_Fortran_Clang - Fatal编程技术网

混合C++;和Fortran 在C++和FORTRAN?< /强> 中有没有使用CLAN编译器的方法?

混合C++;和Fortran 在C++和FORTRAN?< /强> 中有没有使用CLAN编译器的方法?,c++,cmake,fortran,clang,C++,Cmake,Fortran,Clang,到目前为止,我使用cmake与 project(mixing CXX Fortran) 但这会触发使用g++ --CXX编译器标识为GNU 6.2.0 使用Fortran混合的我的项目的CMakeLists.txt: cmake_minimum_required(VERSION 3.7.0) project(mixing CXX Fortran) # SET UP ROOT https://root.cern.ch/how/integrate-root-my-project-cmake se

到目前为止,我使用cmake与

project(mixing CXX Fortran)
但这会触发使用
g++

--CXX编译器标识为GNU 6.2.0

使用Fortran混合的我的项目的CMakeLists.txt:

cmake_minimum_required(VERSION 3.7.0)
project(mixing CXX Fortran)

# SET UP ROOT https://root.cern.ch/how/integrate-root-my-project-cmake
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} /opt/local/libexec/root6/etc/root/cmake)
find_package(ROOT REQUIRED COMPONENTS MATH MINUIT2)
include(${ROOT_USE_FILE})

include_directories(Experiment Theory ${ROOT_INCLUDE_DIRS})

add_executable(mixing main.cpp)

target_link_libraries(mixing ${ROOT_LIBRARIES})

不工作,因为g++无法使用根库所需的Clang标志
-stdlib=libc++

您始终可以通过更改来覆盖c/c++编译器,在您的示例中,更改是c或CXX

  • 您可以设置
    CC
    CXX
    环境变量以覆盖CMAKE\u C\u编译器/CMAKE\u CXX\u编译器的默认值:
  • CC=clang CXX=clang++cmake

  • 调用cmake时,可以在命令行上设置这些参数:
  • cmake-dcmake\u C\u编译器=clang-dcmake\u CXX\u编译器=clang++

  • 您也可以直接在cmake文件中设置:
  • set(CMAKE\u C\u编译器叮当声)
    set(CMAKE\u CXX\u编译器铿锵++)


    但是,在使用任何project/enable_language指令之前,请确保在cmake文件的最顶端执行此操作。

    您可以向我们展示如何调用cmake,特别是如何指定工具链吗?@Frank我使用我的build文件夹中的命令
    cmake..
    。你所说的工具链是什么意思?如果你同时使用gfortran和g++(不包括clang++,这是一种合理的策略)似乎你应该允许G+使用-LSTDC++。在这个问题上似乎有一个例子来说明如何强制不同的编译器。@ Dy1999我强迫CGube现在使用Cleang++通过<代码> -dCMAMJCXXYORGULL = CLAN++< /Cord>。现在看来它工作得很好。我们发现CMake对于C++项目来说大部分是被破坏的。即使在将项目设置为C++之后,它也会使用C编译器进行测试。我们经历了各种愚蠢的中断,从失败的功能测试到失败的链接。在过去的10年里,我一直不喜欢cmake(尽管我甚至推动了对cmake的承诺)。有趣的是,现在我们的团队正在讨论改用其他方式(cmake或…),我强烈反对:)