1

我们的存储库中有一些依赖库。主要部分是用 cmake 构建的。现在 cmake-makefiles 将构建依赖库,它没有 cmake 构建系统。对于一个特定的库,应该使用“Makefile.squirrel”。该库的 cmakelists.txt :

cmake_minimum_required (VERSION 2.8)

include(ExternalProject)

ExternalProject_Add(squirrel,
    SOURCE_DIR "./"
    UPDATE_COMMAND ""
    BUILD_IN_SOURCE 1
    CONFIGURE_COMMAND ""
    BUILD_COMMAND "make -f ${CMAKE_CURRENT_SOURCE_DIR}/Makefile.squirrel"
    INSTALL_COMMAND ""
    )

但是,在运行 make 时,我收到一条错误消息:

[ 93%] Performing build step for 'squirrel,'
/bin/sh: make -f /home/enrico/projekte/projectname/dependencies/SQUIRREL2/Makefile.squirrel: not found
make[2]: *** [dependencies/SQUIRREL2/squirrel,-prefix/src/squirrel,-stamp/squirrel,-build] Error 127
make[1]: *** [dependencies/SQUIRREL2/CMakeFiles/squirrel,.dir/all] Error 2
make: *** [all] Error 2

ls -lA on /home/enrico/projekte/projectname/dependencies/SQUIRREL2/Makefile.squirrel显示文件存在。

硬编码文件路径(不是解决方案的选项)也不起作用。

有什么想法或提示吗?

4

2 回答 2

3

三个观察:

1)您使用“松鼠”作为项目的名称。CMake 函数的参数是空格分隔的,因此逗号是您给出的名称的一部分。(可能不是你想要的。)

2)你应该使用:

SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}"

而不是

SOURCE_DIR "./"

因为“./”无论如何都只是相对于该完整路径名。

3)问题的真正根源是您的 BUILD_COMMAND 值:

BUILD_COMMAND "make -f ${CMAKE_CURRENT_SOURCE_DIR}/Makefile.squirrel"

它应该是:

BUILD_COMMAND make -f ${CMAKE_CURRENT_SOURCE_DIR}/Makefile.squirrel

如果那里有引号,那么 shell 正在寻找一个名为“make -f .../Makefile.squirrel”的实际文件,因为 CMake 通过空格解析参数,但双引号告诉 CMake“这正是一个包含空格..." 如果 ${CMAKE_CURRENT_SOURCE_DIR} 的扩展值中有空格,则 CMake 在生成的 makefile 中生成命令时将正确地双引号(或转义,取决于平台/shell)。

于 2011-02-17T04:57:02.537 回答
0

您可以尝试编写一个使用正确的 makefile 调用 make 的脚本。只需将 CMAKE_CURRENT_SOURCE_DIR 导出到脚本读取的环境变量。

于 2010-12-30T18:52:33.340 回答