基于CMakefile 多目录工程,改写Qt 工程文件, 演示一个简单的工程目录。
目录结构如下:
.
├── app # 源码目录app
│ └── main.cpp
├── gui # 编译目录,分minigui(CMakefile) , Qt(qmake)
│ ├── minigui # minigui
│ └── qt # qt
│ ├── app
│ │ └── app.pro
│ ├── libtest
│ │ └── libtest.pro
│ ├── makeqt.sh # 编译脚本
│ ├── test-arm
│ ├── main.pro
│ └── main.pro.user
└── libtest # 源码目录libtest
└── hello.cpp
7 directories, 8 files
1.源码目录libtest 编译成库
cat libtest/hello.cpp
/// @file hello.cpp
/// @brief
/// @author EastonWoo <[email protected]>
/// 0.01
/// @date 2019-08-20
#include
void func() {
printf("hello world!\n");
}
2.源码目录app编译成应用
cat app/main.cpp
/// @file main.cpp
/// @brief
/// @author EastonWoo <[email protected]>
/// 0.01
/// @date 2019-08-20
#include
extern void func();
int main(int argc, const char *argv[])
{
printf("Main Functions!\n");
func();
return 0;
}
3. 编译主pro文件:
cat gui/qt/main.pro
#-------------------------------------------------
#
# Project created by QtCreator 2019-08-14T17:41:05
#
#-------------------------------------------------
message("11111111111 [$$ARCH]")
if (equals($$ARCH,x86)) {
message("x86 平台需要做的操作")
} else {
message("arm 平台需要做的操作")
# ARCH=arm
}
MY_PROJECT_SOURCE_DIR = $$PWD/../..
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += libtest \
app \
4. 编译子目录libtest
cat gui/qt/libtest/libtest.pro
### My Dirs
MY_PROJECT_SOURCE_DIR = $$PWD/../../..
MY_BUILD_DIR = $$PWD/../.build
MY_GUI_ROOT_DIR = $$PWD/..
MY_CURRENT_RPO_DIR = $$PWD/
TARGET = libtest
TEMPLATE = lib
CONFIG += c++11 \
staticlib \
SOURCES += \
$$MY_PROJECT_SOURCE_DIR/libtest/hello.cpp
5.编译子目录app
### My Dirs
MY_PROJECT_SOURCE_DIR = $$PWD/../../..
MY_BUILD_DIR = $$PWD/../.build
MY_GUI_ROOT_DIR = $$PWD/..
MY_CURRENT_RPO_DIR = $$PWD/
TARGET = test-$$ARCH
TEMPLATE = app
DESTDIR = $$MY_GUI_ROOT_DIR
CONFIG += c++11
SOURCES += \
$$MY_PROJECT_SOURCE_DIR/app/main.cpp
LIBS += -L$$MY_BUILD_DIR/libtest -llibtest
6. 编译脚本
cat gui/qt/makeqt.sh
#!/bin/bash -
#===============================================================================
#
# FILE: makeqt.sh
#
# USAGE: ./makeqt.sh
#
# DESCRIPTION:
#
# OPTIONS: ---
# REQUIREMENTS: ---
# BUGS: ---
# NOTES: ---
# AUTHOR: EastonWoo
# ORGANIZATION:
# CREATED: 08/20/2019 16:21
# REVISION: ---
#===============================================================================
set -o nounset # Treat unset variables as an error
rm -rf .build
mkdir -p .build
cd .build
/usr/local/Qt-arm/bin/qmake ../main.pro -spec devices/linux-TIarmv7-sgx-g++ ARCH=arm && /usr/bin/make qmake_all
make -j4
# make clean -j4
cd ..
7.运行脚本
test-> ls
app/ gui/ libtest/
test-> cd gui/qt/
qt-> la
./ ../ app/ .build/ libtest/ makeqt.sh test.pro test.pro.user
qt-> sh makeqt.sh
qt-> la
./ ../ app/ .build/ libtest/ makeqt.sh test-arm* test.pro test.pro.user
已生成test-arm可执行文件
8.在arm板卡上运行
root@buildroot:/work# /usr/local/bin/runapp ./test-arm
Main Functions!
hello world!