c++ - 如何在 CLion 中静态链接 Qt5 与 CMake?

标签 c++ qt makefile cmake qt5

我下载了 Qt 的源代码并使用 -static 标志将其编译到 /usr/local/Qt5_static/ 中。我创建了一个空项目并像这样更改了 CMakeLists.txt:

cmake_minimum_required(VERSION 3.6)
project(Splines)

set(CMAKE_CXX_COMPILER "/usr/bin/clang++")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -Wall -Wextra -pedantic -static -stdlib=libc++ -lc++abi -v")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
set(SOURCE_FILES main.cpp)

set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(Qt5_DIR "/usr/local/Qt5_static/")
find_package(Qt5Widgets)

add_executable(Splines ${SOURCE_FILES})

target_link_libraries(Splines Qt5::Widgets)

存在链接器错误。

/usr/bin/ld: attempted static link of dynamic object `/usr/lib/libQt5Widgets.so.5.7.0'
clang-3.8: error: linker command failed with exit code 1 (use -v to see invocation)

看起来链接器试图链接共享库而不是我编译的静态库。我尝试了 CMakeLists.txt 的其他变体但失败了。

如何正确地静态链接 Qt 和 cmake? (抱歉我的英语不好)

最佳答案

CMAKE_CXX_FLAGS编译器标志,但是target_link_libraries 使用链接器标志,它们是CMAKE_EXE_LINKER_FLAGS。对于静态链接,您需要将 -static 添加到 linker flags

关于c++ - 如何在 CLion 中静态链接 Qt5 与 CMake?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40225307/

相关文章:

c++ - 检查文件是否是 C++ 中的命名管道 (fifo)

c++ - 不同编译器中的纯/常量函数属性

c++ - 在匿名命名空间中定义 QObject 派生类?

qt - 如何动态创建Q_Properties

linux - 如何在一段时间内制作具有特定大小的文件?

c++ - fstream 变量获取文本文件中的所有行

c++ - 简化类演示的代码

c++ - 无法打开已编译的项目

linux - 在 Linux 上使用 makefile 为复杂项目构建动态库

linux - 如何监控长时间运行的命令的进度?