混合C++;和Fortran 在C++和FORTRAN?< /强> 中有没有使用CLAN编译器的方法?
到目前为止,我使用cmake与混合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
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-dcmake\u C\u编译器=clang-dcmake\u CXX\u编译器=clang++
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或…),我强烈反对:)