【问题标题】:what's the equivalence of Clang++'s "-rdynamic" option in CMake?CMake 中 Clang++ 的“-rdynamic”选项的等价物是什么?
【发布时间】:2022-07-31 04:46:50
【问题描述】:

我正在尝试通过阅读 LLVM 文档来创建一种新的编程语言。其中一个文件是关于“Kaleidoscope”的,一种玩具编程语言。 (教程在这里:https://releases.llvm.org/9.0.0/docs/tutorial/LangImpl01.html)。

教程中的所有代码都写在一个文件中,可以通过以下命令编译:

clang++ -g -O3 toy.cpp -I/usr/lib/llvm-10/include -std=c++14  \
-fno-exceptions -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS \
-L/usr/lib/llvm-10/lib \
-rdynamic \
-lLLVM-10 -o toy

但是,我想通过 CMake 管理我的项目。我已经将上面的大部分命令翻译成 CMakeLists.txt 文件(后附),除了选项“-rdynamic”。 有谁知道如何将此选项添加到我的 CMakeLists.txt ?提前致谢!

SET(CMAKE_CXX_COMPILER "/usr/bin/clang++")
INCLUDE_DIRECTORIES("/usr/lib/llvm-10/include")
LINK_DIRECTORIES("/usr/lib/llvm-10/lib")

SET(_GNU_SOURCE 1)
SET(__STDC_CONSTANT_MACROS 1)
SET(__STDC_FORMAT_MACROS 1)
SET(__STDC_LIMIT_MACROS 1)

# Project configuration
# omit something unrelated

FIND_PACKAGE(LLVM REQUIRED CONFIG)
TARGET_LINK_LIBRARIES(compiler LLVM-10)

【问题讨论】:

  • 在 Stack Overflow 上,我们不会在标题中将问题标记为“已关闭”或“已解决”。接受答案后,您的问题将自动标记为绿色。但即使在这种状态下,也完全可以添加问题的答案,以便未来的读者可以找到它们。

标签: c++ cmake llvm clang++ cmakelists-options


【解决方案1】:

发现只需将此添加到 CMakeLists.txt 就可以了。

set(CMAKE_CXX_FLAGS -rdynamic)

【讨论】:

    【解决方案2】:

    干净的方法是设置ENABLE_EXPORTS属性:

    set_property(TARGET compiler PROPERTY ENABLE_EXPORTS ON)
    

    【讨论】:

      【解决方案3】:

      首先,用大写字母编写 CMake 命令在 10 年前就已经过时了。现在它简直不能接受(在我看来),所以它应该是set()include_directories() 等。

      至于你的问题:rdynamic 是一个链接器标志,所以你使用target_link_options() 命令将它添加到你的目标。如果它是编译器标志,您将使用target_compile_options()

      示例:target_link_options(compiler PRIVATE rdynamic)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-29
        • 2020-02-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多