gpt4 book ai didi

c++ - 将 -fPIC 替换为 -fpic

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:12:53 26 4
gpt4 key购买 nike

使用 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_PICCMAKE_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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com