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

gkl3eglg  于 2022-11-11  发布在  其他
关注(0)|答案(3)|浏览(301)

我试图通过阅读LLVM文档来创建一种新的编程语言。其中一个文档是关于“万花筒”的,一种玩具编程语言。(教程在这里:https://releases.llvm.org/9.0.0/docs/tutorial/LangImpl01.html)的数据。
tutorial中的所有代码都写在一个文件中,可以通过下面的命令进行编译:

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)
k3fezbri

k3fezbri1#

相当敏锐地发现,只是把这个添加到CMakeLists.txt是可以的。

set(CMAKE_CXX_FLAGS -rdynamic)
bf1o4zei

bf1o4zei2#

简单的方法是设置ENABLE_EXPORTS属性:

set_property(TARGET compiler PROPERTY ENABLE_EXPORTS ON)
vs3odd8k

vs3odd8k3#

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

示例target_link_options(compiler PRIVATE rdynamic)

如果是编译器标志,则必须使用target_compile_options()
在一个较小的注意事项,写CMake命令的大写字母被认为是过时的。现代的做法是使用小写字母的命令:set()include_directories()等等。

相关问题