【发布时间】:2021-02-03 12:27:06
【问题描述】:
我尝试在我的 CMakeLists.txt 文件中使用 -rdynamic 选项,如下所示:
cmake_minimum_required(VERSION 3.5)
project(Tmuduo CXX)
...
set(CMAKE_CXX_STANDARD 11)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
add_compile_options(-Wthread-safety )
endif()
add_compile_options(
# -DVALGRIND
-Wall
-Wno-unused-parameter
-Woverloaded-virtual
-Wpointer-arith
-Wwrite-strings
-O3
-rdynamic
)
...
当我使用cmake .. -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang 和make VERBOSE=1 时,我收到如下消息:
正如您所见,-rdynamic 编译选项确实出现在 clang++ 命令中,编译器还抱怨该参数未被使用。但是当我使用下面的命令时,发生了一些奇怪的事情。
clang++ -I/home/phoenix/MyProject/Tmuduo -g -Wthread-safety -Wall -Wno-unused-parameter -Woverloaded-virtual -Wpointer-arith -Wwrite-strings -rdynamic -std=gnu++11 test/Exception_test.cc base/Exception.cc base/CurrentThread.cc -o exception_test -O3
一切顺利。这一次,-rdynamic 选项有效。这真的让我很困惑。谁能告诉我这里发生了什么?为什么cmake失败时clang++命令有效?
【问题讨论】:
-
-rdynamic是一个链接器选项,在add_link_option中使用它。 -
好的,谢谢您的回答。我将我的 cmake 版本从 3.8 升级到 3.18 并使用
add_link_options(-rdynamic)来解决我的问题。 ????
标签: c++ cmake clang compiler-warnings