Cmake ExternalProject错误:文件试图在源目录中创建目录
我正在为我的项目编写CMake脚本,我正在尝试调用另一个编译器来获取文件子集,该文件子集位于项目源代码树的子目录下 我发现我可以使用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)
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)
源代码内部版本仍然被禁止