如何将sysroot从Yocto传递给cmake

时间:2019-04-30 14:45:48

标签: cmake yocto

我正在使用Yocto配方来构建cmake项目。在Yocto环境中,我确认--sysroot=my-app/recipe-sysroot和所有从属库均已安装到该位置。在我的CMakeList.txt中,我设置了link_directories(/usr/lib),但是在构建时出现错误消息以指示找不到依赖库。 有谁知道如何通过Yocto sysroot环境进行cmake?

我的食谱,     继承cmake

DEPENDS = "\
        azure-iot-sdk-c \
        openssl \
        zlib \
        curl \
        boost \
        parson \
        gtest \
"

S = "${WORKDIR}/git"
B = "${WORKDIR}/build"

EXTRA_OECMAKE = "\
        -DCMAKE_BUILD_TYPE=Debug \
        -DBUILD_SAMPLES=ON \
        -DBUILD_TESTS=ON \
        -DBUILD_TOOLS=ON \
"

FILES_${PN}-staticdev = "${libdir}/*.a"
FILES_${PN} += "${libdir}/*.so"
FILES_SOLIBSDEV = ""
INSANE_SKIP_${PN} += "dev-so rpaths"

如果我在CMakeList中设置了真实路径,它将起作用,

set(LIBRARY_DIR "${CMAKE_CURRENT_LIST_DIR}/../recipe-sysroot/usr/lib")
set(STATIC_LIBRARY ${LIBRARY_DIR}/libiothub_client.a)

但是,如果我根据sysroot设置了相关路径,那么它将无法正常工作,

set(LIBRARY_DIR "/usr/lib")

1 个答案:

答案 0 :(得分:2)

不要:

set(LIBRARY_DIR "${CMAKE_CURRENT_LIST_DIR}/../recipe-sysroot/usr/lib")

通常不需要在cmake中包含任何有关yocto的特定信息。而是添加

include(GNUInstallDirs)

在您的食谱中添加:

inherit cmake

如果cmake正确安装了静态库和头文件,例如:

install (TARGETS <yourtarget> DESTINATION ${CMAKE_INSTALL_LIBDIR})
file(GLOB HEADERS include/*.h)
install(FILES ${HEADERS} DESTINATION  ${CMAKE_INSTALL_INCLUDEDIR})

我上面的建议应该起作用,如果不使用cmake安装静态库,则必须在程序包配方中定义do_install任务。例如

do_install() {
   install -m 0755 -d ${D}${libdir} 
   install -m 0755 ${B}/test-staticlibrary.a  ${D}/${libdir}
}

如果您发布cmake文件,我可以为您提供进一步的帮助