我寫了一個簡易的Qt程式,沒有用qmake 和pro 。用cmake管理的。
原始碼檔案所在的目錄:/home/用戶名/QtProjects/untitled
只有一個檔案main.cpp,內容如下:
#include <QApplication>
#include <QWidget>
using namespace std;
int main(int argc,char**argv)
{
QApplication app(argc,argv);
QWidget * w = new QWidget();
w->show();
return app.exec();
}
CMakeLists.txt內容如下:
cmake_minimum_required(VERSION 2.8)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_PREFIX_PATH /home/用戶名/qt/5.7/gcc_64/bin)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# 開啟Qt MOC
set(CMAKE_AUTOMOC ON)
#開啟Qt ROC
set(CMAKE_AUTORCC ON)
# 開啟Qt UIC
set(CMAKE_AUTOUIC ON)
# Qt模塊
set(QT Core Gui Widgets)
# 專案名稱
project(untitled)
# 安裝的qt根目錄
set(QT_BASE_DIR /home/用戶名/qt/5.7/gcc_64)
# 指定頭檔案搜索目錄
include_directories(
${QT_BASE_DIR}/include/QtCore
${QT_BASE_DIR}/include/QtGui
${QT_BASE_DIR}/include/QtWidgets
${QT_BASE_DIR}/include
)
# 指定庫目錄
link_directories(
${QT_BASE_DIR}/lib
)
# 添加可執行程式
add_executable(${PROJECT_NAME} "main.cpp")
# 指定鏈接庫
target_link_libraries(
${PROJECT_NAME}
Qt5Core
Qt5Gui
Qt5Widgets
)
問題出在-fPIC上面,我在程式的編譯目錄執行cmake命令:
cmake /home/用戶名/QtProjects/untitled
執行之后直接make編譯,會報錯:

這里報錯說沒有使用-fPIC,但是我的CMakeLists.txt明明是有加-fPIC的。奇怪的是,如果此時,再次執行相同的cmake命令:
cmake /home/用戶名/QtProjects/untitled,再次編譯就沒有問題。對比前后的差異我發現第一次執行cmake后,在:./CMakeFiles/untitled.dir/flags.make檔案中的CXX_FLAGS并沒有帶上-fPIC,然而第二次執行后,這里就帶上了這個-fPIC。很奇怪一模一樣的命令執行兩次出現了不同的結果。
我機器是Ubuntu 16.04,apt-get裝的cmake版本是3.5.1.
后來我手動編譯安裝了cmake 3.16.5 沒有出現這個問題。有了解的大佬麻煩講解下,這個問題是cmake的bug嗎?還是我自己的cmakelist寫的有問題?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/125664.html
標籤:工具平臺和程序庫
上一篇:拼題啊啊啊啊啊啊啊啊
下一篇:藍橋杯十六進制轉八進制簡易思路
