cmake:如何正确设置外部项目中make之前的变量?

粗暴的人

我正在为pi项目中需要的库建立一个交叉编译项目。我想浏览最新的mosquitto库,并弄清楚要正确构建它需要传递的内容。不幸的是,当我定义BUILD_COMMAND时,似乎无法正确设置变量以进行调用。

这是在我的CMakeLists.txt中定义的外部项目:

ExternalProject_Add(mosquitto
    URL ${SRC_URL} URL_MD5 ${SRC_MD5}
    BUILD_IN_SOURCE 1
    CONFIGURE_COMMAND echo "No configuration necessary."
    BUILD_COMMAND cd <SOURCE_DIR>/lib && export CC=gcc && export CXX=g++ && export CROSS_COMPILE=${CROSS_COMPILE_TRIPLE} && export CFLAGS=--sysroot=${CMAKE_SYSROOT} && export LDFLAGS="--sysroot=${CMAKE_SYSROOT} -Wl,-rpath-link,${CMAKE_SYSROOT}/lib/arm-linux-gnueabihf -Wl,-rpath-link,${CMAKE_SYSROOT}/usr/lib/arm-linux-gnueabihf -L${CMAKE_SYSROOT}/usr/lib/arm-linux-gnueabihf" && make --trace

这是失败的步骤的make输出:

arm-linux-gnueabihf-gcc -shared "--sysroot=/home/heardg/pi/system/devroot -Wl,-rpath-link,/home/heardg/pi/system/devroot/lib/arm-linux-gnueabihf -Wl,-rpath-link,/home/heardg/pi/system/devroot/usr/lib/arm-linux-gnueabihf -L/home/heardg/pi/system/devroot/usr/lib/arm-linux-gnueabihf" -Wl,--version-script=linker.version -Wl,-soname,libmosquitto.so.1 mosquitto.o logging_mosq.o memory_mosq.o messages_mosq.o net_mosq.o read_handle.o read_handle_client.o read_handle_shared.o send_mosq.o send_client_mosq.o socks_mosq.o srv_mosq.o thread_mosq.o time_mosq.o tls_mosq.o util_mosq.o will_mosq.o -o libmosquitto.so.1  -lrt -lssl -lcrypto -lpthread -lcares
/home/heardg/pi/linaro/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.9.4/../../../../arm-linux-gnueabihf/bin/ld: cannot find crti.o: No such file or directory
/home/heardg/pi/linaro/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.9.4/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lrt
/home/heardg/pi/linaro/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.9.4/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lssl
/home/heardg/pi/linaro/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.9.4/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lcrypto
/home/heardg/pi/linaro/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.9.4/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lpthread
/home/heardg/pi/linaro/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.9.4/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lcares
collect2: error: ld returned 1 exit status
Makefile:46: recipe for target 'libmosquitto.so.1' failed`

我发现是导致问题的原因是LDFLAGS周围的引号。

"--sysroot=/home/heardg/pi/system/devroot -Wl,-rpath-link,/home/heardg/pi/system/devroot/lib/arm-linux-gnueabihf -Wl,-rpath-link,/home/heardg/pi/system/devroot/usr/lib/arm-linux-gnueabihf -L/home/heardg/pi/system/devroot/usr/lib/arm-linux-gnueabihf"

如果我手动运行link命令并删除上面的双引号,则此命令成功。

如何更好地在BUILD_COMMAND中形成参数以除去引号?

齐瓦列夫

当有很多命令用于时ExternalProject_Add,明智的做法是使用脚本来执行它们。至于将CMake变量传递给脚本,可以通过脚本的参数或脚本本身的配置来传递它们:

build_mosquitto.sh.in

# The only argument to the script is mosquitto's source directory.
source_dir=$1

exports CC=gcc
export CXX=g++
export CROSS_COMPILE=@CROSS_COMPILE_TRIPLE@
# ... other exports

cd ${source_dir}/lib && make

CMakeLists.txt

configure_file("build_mosquitto.sh.in" "build_mosquitto.sh" @ONLY)

ExternalProject_Add(mosquitto
    URL ${SRC_URL} URL_MD5 ${SRC_MD5}
    BUILD_IN_SOURCE 1
    CONFIGURE_COMMAND echo "No configuration necessary."
    BUILD_COMMAND sh "${CMAKE_CURRENT_BINARY_DIR}/build_mosquitto.sh" <SOURCE_DIR>
)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何正确设置CMake项目?

来自分类Dev

如何在cordova项目中正确设置URI?

来自分类Dev

如何使用CMake将外部库(增强型)包含到CLion C ++项目中?

来自分类Dev

如何在编译源代码之前告诉CMake下载外部项目

来自分类Dev

将yaml-cpp添加到现有项目时正确设置CMake变量

来自分类Dev

Cmake错误:项目中使用了以下变量,但是将其设置为NOTFOUND试图在archlinux中编译Rods Rigs

来自分类Dev

如何在自定义项目中正确设置站点地图添加

来自分类Dev

如何正确连接Loader项目中的信号?

来自分类Dev

如何在heroku-django项目中设置环境变量?

来自分类Dev

在CMake中,如何将C#项目的外部引用设置为特定版本?

来自分类Dev

如何在使用ExternalProject_Add添加的外部项目上设置CMake策略和属性

来自分类Dev

如何正确设置此变量?

来自分类Dev

如何使用CMake在项目中添加预构建的静态库?

来自分类Dev

如何防止CMake破坏Eclipse项目中的PyDev配置

来自分类Dev

如何避免cmake子项目中的名称冲突?

来自分类Dev

如何让CMake在我的C库项目中找到测试?

来自分类Dev

如何在cmake项目中使用c ++ 20

来自分类Dev

如何在CMake项目中使用QtMqtt?

来自分类Dev

如何为cmake项目设置Eclipse?

来自分类Dev

在调用回调之前如何设置变量?

来自分类Dev

如何自动重新加载Eclipse项目中的外部代码更改?

来自分类Dev

如何在laravel项目中包含外部文件?

来自分类Dev

如何在Moqui项目中加载外部jar库?

来自分类Dev

如何从Maven项目中的外部jar读取属性文件

来自分类Dev

如何使用我的模块作为 webpack 项目中的外部库?

来自分类Dev

在使用CMake的主项目之前强制构建外部项目(使用buildtools)

来自分类Dev

在CMake项目中包含libsimdpp

来自分类Dev

CMake项目中的组建目标

来自分类Dev

CMake:在项目中包含库

Related 相关文章

  1. 1

    如何正确设置CMake项目?

  2. 2

    如何在cordova项目中正确设置URI?

  3. 3

    如何使用CMake将外部库(增强型)包含到CLion C ++项目中?

  4. 4

    如何在编译源代码之前告诉CMake下载外部项目

  5. 5

    将yaml-cpp添加到现有项目时正确设置CMake变量

  6. 6

    Cmake错误:项目中使用了以下变量,但是将其设置为NOTFOUND试图在archlinux中编译Rods Rigs

  7. 7

    如何在自定义项目中正确设置站点地图添加

  8. 8

    如何正确连接Loader项目中的信号?

  9. 9

    如何在heroku-django项目中设置环境变量?

  10. 10

    在CMake中,如何将C#项目的外部引用设置为特定版本?

  11. 11

    如何在使用ExternalProject_Add添加的外部项目上设置CMake策略和属性

  12. 12

    如何正确设置此变量?

  13. 13

    如何使用CMake在项目中添加预构建的静态库?

  14. 14

    如何防止CMake破坏Eclipse项目中的PyDev配置

  15. 15

    如何避免cmake子项目中的名称冲突?

  16. 16

    如何让CMake在我的C库项目中找到测试?

  17. 17

    如何在cmake项目中使用c ++ 20

  18. 18

    如何在CMake项目中使用QtMqtt?

  19. 19

    如何为cmake项目设置Eclipse?

  20. 20

    在调用回调之前如何设置变量?

  21. 21

    如何自动重新加载Eclipse项目中的外部代码更改?

  22. 22

    如何在laravel项目中包含外部文件?

  23. 23

    如何在Moqui项目中加载外部jar库?

  24. 24

    如何从Maven项目中的外部jar读取属性文件

  25. 25

    如何使用我的模块作为 webpack 项目中的外部库?

  26. 26

    在使用CMake的主项目之前强制构建外部项目(使用buildtools)

  27. 27

    在CMake项目中包含libsimdpp

  28. 28

    CMake项目中的组建目标

  29. 29

    CMake:在项目中包含库

热门标签

归档