【问题标题】:Mixing C++ and Fortran混合 C++ 和 Fortran
【发布时间】:2017-05-18 23:57:41
【问题描述】:

有没有办法在混合 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 的,特别是您是如何指定工具链的吗?
  • @Frank 我使用构建文件夹中的命令cmake ..。工具链是什么意思?
  • 如果您同时使用 gfortran 和 g++(不包括 clang++,这是一种合理的策略),您似乎应该允许 g++ 使用 -lstdc++。
  • 问题here 中似乎有一个示例,它似乎显示了如何强制不同的编译器。
  • @d_1999 我现在通过-DCMAKE_CXX_COMPILER=clang++ 强制 cmake 使用 clang++,现在它似乎工作正常。

标签: c++ cmake fortran clang


【解决方案1】:

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

  1. 您可以设置 CC 和 CXX 环境变量以覆盖 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 编译器进行测试。我们经历过各种愚蠢的中断,从失败的功能测试到失败的链接。
  • 在过去的 10 年里,我一直不喜欢 cmake(即使我什至将提交推送到 cmake)。有趣的是,现在我们的团队正在讨论切换到其他东西(cmake 或 ...),我强烈反对 :)
猜你喜欢
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多