Yocto构建中如何从.pro指定的cpp文件生成可执行文件a.out
调整方案
你当前的配置存在三个核心问题:
lgeplugin.pro的模板为lib,默认仅生成动态库,不会生成可执行文件- 测试相关代码包裹在
contains(DEFINES, LGE_PLUGIN)条件块内,默认未传递该宏定义,测试代码不会参与编译 .bb配方仅处理了动态库的安装,未覆盖测试可执行的逻辑
1. 修改lgeplugin.pro配置
修改后可同时编译原有的liblgeplugin.so库和测试可执行文件,如果你只需要生成测试可执行,也可以直接调整模板为app:
QMAKE_CXXFLAGS += -g QMAKE_CFLAGS += -g # c++11参数需要加到CXXFLAGS才会对C++代码生效 QMAKE_CXXFLAGS += \ -Wall \ -Wextra \ -fPIC \ -std=c++11 # 公共配置 INCLUDEPATH += ${Root}/include/ALL \ ${Root}/include/gtest \ DEFINES += USE_LGE_TREE # 原有动态库目标配置 TEMPLATE = lib TARGET = lgeplugin SOURCES += ../../src/lgeplugin.cpp contains(DEFINES, LGE_PLUGIN) { # 库依赖的源文件 SOURCES += \ ../../src/internalclient.cpp \ ../../src/Event.cpp LIBS += -lLGEFramework # 新增测试可执行目标配置 test.target = lgeplugin_test # 如果你需要生成a.out,把此处的值改为a.out即可 test.depends = first # 保证先编译动态库再编译测试 test.commands = $$QMAKE_CXX -o $$test.target \ $$PWD/../../src/gtest_main.cpp $$PWD/../../src/lgeplugin_Test.cpp \ $$QMAKE_CXXFLAGS $$INCLUDEPATH \ -L$$OUT_PWD -lgeplugin -lLGEFramework -lgtest QMAKE_EXTRA_TARGETS += test PRE_TARGETDEPS += $$test.target }
2. 修改lgeplugin.bb配置
需要传递宏定义触发测试编译,同时补充依赖声明和测试可执行的安装逻辑:
QMAKE_PROFILES = "${S}/lgeplugin.pro" # 传递LGE_PLUGIN宏定义给qmake,触发测试代码编译 EXTRA_QMAKEVARS_PRE += "DEFINES+=LGE_PLUGIN" # 声明编译依赖,确保Yocto编译时能找到对应头文件和库 DEPENDS += "gtest LGEFramework" do_install() { install -d ${D}/usr/lib cp -a ${B}/liblgeplugin.so* ${D}/usr/lib # 安装测试可执行到目标文件系统的/usr/bin目录 install -d ${D}/usr/bin install -m 0755 ${B}/lgeplugin_test ${D}/usr/bin/ # 如果你生成的是a.out,将上面一行的lgeplugin_test改为a.out即可 }
内容的提问来源于stack exchange,提问作者sonika
相关产品推荐
相关产品推荐

