You need to enable JavaScript to run this app. Yocto构建中如何从.pro指定的cpp文件生成可执行文件a.out
优惠活动
大模型
产品
解决方案
定价
更多

Yocto构建中如何从.pro指定的cpp文件生成可执行文件a.out

调整方案

你当前的配置存在三个核心问题:

  1. lgeplugin.pro 的模板为lib,默认仅生成动态库,不会生成可执行文件
  2. 测试相关代码包裹在contains(DEFINES, LGE_PLUGIN)条件块内,默认未传递该宏定义,测试代码不会参与编译
  3. .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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 12:36:04