2016-10-24 2 views
0

Я загрузил источники Qt и скомпилировал его с флагом -static в /usr/local/Qt5_static/. Я создал пустой проект и изменил CMakeLists.txt так:Как статически связывать Qt5 с CMake в CLion?

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) 

Похоже, что линкер пытался связать общую библиотеку вместо статической библиотеки lib, которую я скомпилировал. Я пробовал другие варианты CMakeLists.txt, но не смог.

Как статически связать Qt с cmake правильно? (Извините за мой плохой английский)

ответ

0

CMAKE_CXX_FLAGS являются флаги компилятора, но target_link_libraries использует компоновщика флаги, которые CMAKE_EXE_LINKER_FLAGS. Для статической ссылки вам нужно добавить -static в связующие флаги.

Смежные вопросы