混合使用C++和Fortran

11

在混合使用C++和Fortran的情况下,有没有办法使用Clang编译器?

我目前是用cmake来进行编译。

project(mixing CXX Fortran)

但这会触发使用g++

-- CXX编译器标识是GNU 6.2.0

我项目中的CMakeLists.txt混合了Fortran:

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++无法使用ROOT库所需的Clang标志-stdlib=libc++


你能展示一下你是如何调用cmake的吗?特别是你是如何指定工具链的? - user4442671
@Frank,我在我的构建文件夹中使用命令cmake ..。你所说的工具链是什么意思? - DrDirk
如果你同时使用gfortran和g++(除clang++之外,这是一个合理的策略),似乎应该允许g++使用-lstdc++。 - tim18
2
似乎问题在这里中有一个示例,似乎展示了如何强制使用不同的编译器。 - d_1999
@d_1999 我现在通过 -DCMAKE_CXX_COMPILER=clang++ 强制 cmake 使用 clang++,目前看起来运行良好。 - DrDirk
@d_1999 你打算写一个正式的答案吗?这里有一个悬赏,如果你指出了正确的方向,那么获得它是公平的。(或者是链接问题中答案的所有者)。 - Rodrigo Rodrigues
1个回答

4
您可以通过更改CMAKE_<LANG>_COMPILER来覆盖c/c++编译器,其中< LANG>在您的情况下为C或CXX。

  1. 您可以设置CCCXX环境变量以覆盖CMAKE_C_COMPILER / CMAKE_CXX_COMPILER的默认值:

CC = clang CXX = clang ++ cmake

  1. 在调用cmake时,您可以在命令行上设置这些:

cmake -D CMAKE_C_COMPILER = clang -D CMAKE_CXX_COMPILER = clang ++

  1. 您还可以直接在cmake文件中设置这些:

set(CMAKE_C_COMPILER clang) set(CMAKE_CXX_COMPILER clang ++)

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


我们发现CMake在C++项目中大多数情况下都是有问题的。即使将项目设置为C++,它仍然会使用C编译器进行测试。由此导致了各种愚蠢的错误,从功能测试失败到链接失败都有可能。 - jww
在过去的10年里,我一直不喜欢cmake(尽管我甚至提交了一些cmake的代码)。有趣的是,现在我们的团队正在讨论是否要切换到其他构建工具(如cmake等),而我强烈反对 :) - Pavel P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接