2016-06-27 11 views
2

Qtを使用すると、CMakeは自動的に-fPICフラグをコンパイルオプションに追加します。私は-fpicを使いたいので、すべてのCmake変数を調べ、-fPIC-fpicに置き換えました。-fPICを-fpicに置き換えます。

cmake_minimum_required(VERSION 3.5) 
project(sss) 

find_package(Qt5 REQUIRED COMPONENTS Core Sql) 

get_cmake_property(_variableNames VARIABLES) 
foreach (_variableName ${_variableNames}) 
     if (NOT "${${_variableName}}" STREQUAL "") 
       string(REPLACE "-fPIC" "-fpic" ${_variableName} ${${_variableName}}) 
       string(REPLACE "-fPIE" "-fpie" ${_variableName} ${${_variableName}}) 
     endif() 
     #message(STATUS "${_variableName}=${${_variableName}}") 
endforeach() 

set(CMAKE_CXX_FLAGS "-fpie") 
set(CMAKE_EXE_LINKER_FLAGS "-fpie -pie") 

add_executable(sss main.cpp) 

target_link_libraries(sss Qt5::Core Qt5::Sql) 

main.cpp

#include <QSqlDatabase> 

int main(){ 
     QSqlDatabase::addDatabase("QPSQL"); 
} 

は残念ながらCMakeのはまだそれが含まれていないリストされている変数althoguh、-fPICフラグを追加して含まれています

Building CXX object CMakeFiles/sss.dir/main.cpp.o 
/usr/bin/c++ -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_SQL_LIB -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -isystem /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -isystem /usr/include/x86_64-linux-gnu/qt5/QtSql -fPIC -o CMakeFiles/sss.dir/main.cpp.o -c src/main.cpp 

がどのように私は-fpic-fPICを置き換えることができますか?

+1

これはQt自体から来ていると思います([here](https://cmake.org/Bug/view.php?id=16002)を参照)。 ['INTERFACE_COMPILE_OPTIONS'](https://cmake.org/cmake/help/latest/prop_tgt/INTERFACE_COMPILE_OPTIONS.html)を' -fPIC'に設定します。 'find_package()'の後に 'set_property(TARGET Qt5 ::コアPROPERTY INTERFACE_COMPILE_OPTIONS" -fpic ")'を追加してみてください。 – Florian

答えて

1

答えに私のコメントを回す

コードがCMAKE_CXX_COMPILE_OPTIONS_PICまたはCMAKE_CXX_COMPILE_OPTIONS_PIEのようなCMakeのグローバル変数を上書きします。

しかし、Qtはターゲットプロパティを通じて独自の-fPICオプションを持っています。 Qt5::Coreターゲットは、INTERFACE_COMPILE_OPTIONS-fPICに設定されています(たとえばhereを参照)。

はあなたfind_package(Qt5 ...)呼び出しの後

set_property(TARGET Qt5::Core PROPERTY INTERFACE_COMPILE_OPTIONS "-fpic") 

を追加することにより、ターゲットのプロパティを上書きしてください。

関連する問題