Cmake 科马克公司;ExternalProject:找不到特定文件

Cmake 科马克公司;ExternalProject:找不到特定文件,cmake,dependencies,project,external-project,Cmake,Dependencies,Project,External Project,我们的存储库中有一些依赖项库。主要部分是使用cmake构建的。现在,cmake生成文件将构建依赖项库,该库没有cmake生成系统。对于一个特定的库,应该使用“Makefile.squirrel”。该库的cmakelists.txt文件: cmake_minimum_required (VERSION 2.8) include(ExternalProject) ExternalProject_Add(squirrel, SOURCE_DIR "./" UPDATE_COMMAN

我们的存储库中有一些依赖项库。主要部分是使用cmake构建的。现在,cmake生成文件将构建依赖项库,该库没有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/dependencires/SQUIRREL2/Makefile.squirrel显示文件存在

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


有什么想法或提示吗?

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

三个观察值:

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

2) 你应使用:

SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}"
而不是

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

3) 问题的真正根源是BUILD_命令值:

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_CURRENT_SOURCE_DIR}的扩展值中有空格,双引号告诉CMake“这正是一个包含空格的参数…”然后,当CMake在其生成的makefiles中生成命令时,它将正确地对其进行双引号引用(或转义,具体取决于平台/shell)。

在发布几小时后,我也有同样的想法。我创建了一个单独的shell脚本,该脚本由BUILD_命令调用。现在还可以,但感觉像是黑客。对于其余的依赖项,我需要更多的信息。。。