clang的等效性是什么CMAKE的选项?

发布于 2025-01-22 12:31:06 字数 1124 浏览 0 评论 0 原文

我正在尝试通过阅读LLVM文档来创建一种新的编程语言。其中一个文档是关于玩具编程语言“万花筒”。 (教程在这里: 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 file(以后连接),除了选项“ -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)

I'm trying to create a new programming language by reading LLVM documents. One of the documents is about "Kaleidoscope", a toy programming language. (tutorial's here: https://releases.llvm.org/9.0.0/docs/tutorial/LangImpl01.html).

All the codes in tutorial are written in a single file, and can be compiled by the command below:

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

However, I want to manage my project by CMake. I've translate most of the command above into
a CMakeLists.txt file (attached afterwards), besides the option "-rdynamic".
Does anyone know how to add this option to my CMakeLists.txt ? Thanks in advance!

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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

只涨不跌 2025-01-29 12:31:06

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

set_property(TARGET compiler PROPERTY ENABLE_EXPORTS ON)

The clean way is to set the ENABLE_EXPORTS property:

set_property(TARGET compiler PROPERTY ENABLE_EXPORTS ON)
执笏见 2025-01-29 12:31:06

很高兴发现只将其添加到 cmakelists.txt 是可以的。

set(CMAKE_CXX_FLAGS -rdynamic)

Quite akward to find out just adding this to CMakeLists.txt is OK.

set(CMAKE_CXX_FLAGS -rdynamic)
通知家属抬走 2025-01-29 12:31:06

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

示例 target_link_options(编译器私有rdynamic)

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

在较小的音符上,在上案例中编写cmake命令被认为是过时的。现代实践是使用小写命令: set(),<代码> include_directories()等。

-rdynamic is a linker flag, so you should use target_link_options() to add it to your target.

Example: target_link_options(compiler PRIVATE rdynamic)

If it were a compiler flag, you'd have to use target_compile_options()

On a smaller note, writing CMake commands in upper case is considered obsolete. The modern practice is to use lowercase commands: set(), include_directories() etc.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文