我正在使用yocto食谱来构建CMAKE项目。在Yocto Enviroment中,我确认--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")
不做:
set(LIBRARY_DIR "${CMAKE_CURRENT_LIST_DIR}/../recipe-sysroot/usr/lib")
通常不必在CMAKE中获得任何特定信息。而是添加
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文件,我可以进一步帮助您