在CMake中,Clang++的“-rdynamic”选项等价于什么?

3
我正在阅读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 上,我们不会在标题中标记问题为“已关闭”或“已解决”。当您接受了一个答案后,您的问题将自动标记为绿色。但即使在这种状态下,完全可以添加答案到问题中,这样它们就能被未来的读者找到。 - Tsyvarev
3个回答

5

清晰的方法是设置 ENABLE_EXPORTS 属性:

set_property(TARGET compiler PROPERTY ENABLE_EXPORTS ON)

0

发现只需将此添加到CMakeLists.txt中即可,感觉有点尴尬。

set(CMAKE_CXX_FLAGS -rdynamic)

-1

-rdynamic 是一个链接器标志,因此您应该使用 target_link_options() 将其添加到目标中。

示例target_link_options(compiler PRIVATE rdynamic)

如果它是编译器标志,则必须使用 target_compile_options()

另外,以大写字母编写 CMake 命令被认为已过时。现代做法是使用小写命令:set()include_directories() 等。


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