使用Qt时,CMake会自动将-fPIC
标志添加到编译选项。我想使用-fpic
,因此我遍历了所有Cmake变量并将-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仍然添加了
-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
? 最佳答案
把我的评论变成答案
您的代码将覆盖CMake全局变量,例如CMAKE_CXX_COMPILE_OPTIONS_PIC
或CMAKE_CXX_COMPILE_OPTIONS_PIE
。
但是Qt通过目标属性带来了自己的-fPIC
选项。 Qt5::Core
目标确实将 INTERFACE_COMPILE_OPTIONS
设置为-fPIC
(请参见here)。
尝试通过添加覆盖目标属性
set_property(TARGET Qt5::Core PROPERTY INTERFACE_COMPILE_OPTIONS "-fpic")
在
find_package(Qt5 ...)
调用之后。关于c++ - 将-fPIC替换为-fpic,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38053846/