Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake ExternalProject错误:文件试图在源目录中创建目录_Cmake - Fatal编程技术网

Cmake ExternalProject错误:文件试图在源目录中创建目录

Cmake ExternalProject错误:文件试图在源目录中创建目录,cmake,Cmake,我正在为我的项目编写CMake脚本,我正在尝试调用另一个编译器来获取文件子集,该文件子集位于项目源代码树的子目录下 我发现我可以使用ExternalProject\u Add命令来完成 这是我代码的一部分 根目录CMakeLists.txt set(CMAKE_DISABLE_SOURCE_CHANGES ON) set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) add_subdirectory(src) ... include(ExternalProject)

我正在为我的项目编写CMake脚本,我正在尝试调用另一个编译器来获取文件子集,该文件子集位于项目源代码树的子目录下

我发现我可以使用
ExternalProject\u Add
命令来完成

这是我代码的一部分

根目录CMakeLists.txt

set(CMAKE_DISABLE_SOURCE_CHANGES ON)
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)

add_subdirectory(src)
... 

include(ExternalProject)
ExternalProject_Add(subproject_name
        PREFIX subproject
        SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/subproject
        DOWNLOAD_COMMAND ""
        # UPDATE_COMMAND ""
        CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${PROJECT_SOURCE_DIR}/cmake/custom.toolchain.cmake
        
)
src/CMakeLists.txt

set(CMAKE_DISABLE_SOURCE_CHANGES ON)
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)

add_subdirectory(src)
... 

include(ExternalProject)
ExternalProject_Add(subproject_name
        PREFIX subproject
        SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/subproject
        DOWNLOAD_COMMAND ""
        # UPDATE_COMMAND ""
        CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${PROJECT_SOURCE_DIR}/cmake/custom.toolchain.cmake
        
)
但是,我发现以下错误:

CMake Error at /usr/local/share/cmake-3.15/Modules/ExternalProject.cmake:1695 (file):
  file attempted to create a directory:
  /home/user/project/src/subproject into a source directory.
Call Stack (most recent call first):
  /usr/local/share/cmake-3.15/Modules/ExternalProject.cmake:3156 (_ep_set_directories)
  src/CMakeLists.txt:93 (ExternalProject_Add)


-- Configuring incomplete, errors occurred!
我已经阅读了几次关于
ExternalProject\u Add
的手册。它清楚地说:

源目录

如果未指定下载方法,则必须指向已解包或克隆/签出外部项目的现有目录

下载_命令。。。 重写用于下载步骤的命令(支持生成器表达式)。如果指定了此选项,则将忽略所有其他下载选项。为提供空字符串将有效地禁用下载步骤

因此,在我看来,CMake应该在子目录中获取源代码,并在build子目录下创建build system

但是,它试图创建已经存在的目录
src/subproject

我还尝试删除
前缀
参数,但得到了相同的错误


我做错了什么?

当前的
ExternalProject\u Add
实现似乎与
CMAKE\u DISABLE\u IN\u SOURCE\u BUILD
选项冲突。当
ExternalProject\u的
SOURCE\u DIR
参数添加
points源代码树中时,需要避免使用此选项


请参阅bugreport:。

您可以尝试删除
前缀子项目
参数。尝试-没有帮助似乎
ExternalProject\u Add
的当前实现与
CMAKE\u DISABLE\u IN\u SOURCE\u BUILD
选项冲突。查看错误报告:。@Tsyvarev,如果您愿意,可以将您的评论转换为答案,我会接受它。@wl2776:Done。我还编辑了您问题的标题,以反映您收到的错误消息。这样可以帮助其他有类似错误的人更容易地找到你的问题。很好的“hack”:)如果你愿意,你可以用这种方法准备你自己的答案。我已经将我的脚本更改为
set(CMAKE\u DISABLE\u SOURCE\u CHANGES OFF)
ExternalProject\u Add(…)
set(CMAKE\u DISABLE\u SOURCE\u CHANGES ON)
源代码内部版本仍然被禁止