【问题标题】:cmake : use ExternalProject_Add and specify the output foldercmake :使用 ExternalProject_Add 并指定输出文件夹
【发布时间】:2017-08-24 08:01:45
【问题描述】:

我目前正在使用一个 CMakeLists.txt 文件,该文件将执行外部 CMakeLists.txt(和依赖项)。

为此,我使用 ExternalProject_Add 命令,但我找不到指定“.sln”文件生成位置的方法。

这是我使用的命令:

include(ExternalProject)
set(LIBRARY_SOURCE_DIR C:/Library)
ExternalProject_Add(Library
  SOURCE_DIR        "${LIBRARY_SOURCE_DIR}"
  CMAKE_ARGS
      -DCMAKE_BUILD_TARGET_ANDROID:BOOL=ON
      -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} 
      -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} 
      -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
      -DCMAKE_CONFIGURATION_TYPES=${CMAKE_CONFIGURATION_TYPES}
      -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
      -G@CMAKE_GENERATOR@
  BUILD_COMMAND     ""
)

所以,我正在寻找一种在此调用中直接指定它的方法。有什么想法吗?

我也试过了,没办法:

  PREFIX            LibraryBuild
  SOURCE_DIR        "${LIBRARY_SOURCE_DIR}"
  BINARY_DIR        "${LIBRARY_SOURCE_DIR}/LibraryBuild"
  INSTALL_DIR       "${LIBRARY_SOURCE_DIR}/LibraryBuild"
  BUILD_COMMAND     "cmake --build ./LibraryBuild"
  CMAKE_ARGS
      -DCMAKE_RUNTIME_OUTPUT_DIRECTORY="./LibraryBuild"
      -DCMAKE_LIBRARY_OUTPUT_DIRECTORY="./LibraryBuild"
      -DCMAKE_EXECUTABLE_OUTPUT_DIRECTORY="./LibraryBuild"
      "./LibraryBuild"
      -DCMAKE_CURRENT_BINARY_DIR="./LibraryBuild"
      -DCMAKE_GENERATOR="Visual Studio 15 2017 Win64"

【问题讨论】:

  • 您尝试过BINARY_DIR 选项吗? (出于某种原因,在构建步骤下列出)。
  • 谢谢,是的,我试过 BINARY_DIR 但没有帮助。
  • 删除该行:-DCMAKE_CURRENT_BINARY_DIR="./LibraryBuild"。变量 CMAKE_CURRENT_BINARY_DIR 应假定为只读。但是您可以添加-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> 行:CMake 不会自动执行此操作。在您的情况下,.sln 文件在哪里生成?
  • 谢谢。我试过但没有运气!因此,所有内容都生成在与主 cmakelists.txt 文件相同的文件夹中!

标签: cmake external-project


【解决方案1】:

请给它BINARY_DIR,但不要给它BUILD_COMMAND。给它一个空的BUILD_COMMAND 意味着构建步骤“什么都不做”,除非 cmake 在您的 PATH 中,否则使用“cmake --build ./LibraryBuild”不起作用,并且使用 Visual Studio 解决方案,您还需要指定“ --config Release”或“--config Debug”。

如果您完全放弃 BUILD_COMMAND 用于 CMake 驱动的项目,CMake 将为使用的 CMAKE_GENERATOR 生成正确的默认构建命令。

另外,我强烈建议您对 BINARY_DIRINSTALL_DIR 使用不同的值。它们不应重叠。我建议您将INSTALL_DIR 设为BINARY_DIR 的子目录或兄弟目录,如果它不是规范安装(即在“/usr”或“C:/Program Files...”下)

【讨论】:

  • 非常感谢,但它不起作用。我只设置了 BINARY_DIR 和 .sln 文件和其他文件在 cmakelists.txt 文件夹中生成!
  • 这听起来像你有一个意外的源代码构建(CMakeCache.txt 文件和其他 CMake 生成的文件在源代码树中)——如果你设置 BINARY_DIR 并从一个不包含 CMakeCache.txt 的新源代码树,那么它应该可以工作。
  • 另外,我尝试了一个示例,只有一个 main 和一个 lib。但似乎没有调用 lib CMakeLists.txt 文件!该项目已创建,但它没有通过示例指向源代码,并且“消息”也没有显示在控制台中!下载链接:dropbox.com/s/eto84gwtw2rx8oe/CMakeTest.zip?dl=0
  • 顺便说一句,我尝试调试 ExternalProject.cmake 并从函数“ExternalProject_Add_Step”中获得以下值。例如,我看不到 args 的位置,CMAKE_ARGS 是空的!
  • ` stamp_file=C:/Test/PhotonLibrary-prefix/src/PhotonLibrary-stamp/$(Configuration)/PhotonLibrary-build comment=执行“PhotonLibrary”命令的构建步骤=C:/Program Files /CMake/bin/cmake.exe --build C:/Test/../TestLib --config Release touch=C:/Program Files/CMake/bin/cmake.exe-EtouchC:/Test/PhotonLibrary-prefix/src /PhotonLibrary-stamp/$(Configuration)/PhotonLibrary-build depends=C:/Test/PhotonLibrary-prefix/src/PhotonLibrary-stamp/$(Configuration)/PhotonLibrary-configure work_dir=C:/Test/../TestLib CMAKE_CONFIGURATION_TYPES =DebugReleaseMinSizeRelRelWithDebInfo `
猜你喜欢
  • 1970-01-01
  • 2016-10-21
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
  • 2013-03-22
  • 1970-01-01
相关资源
最近更新 更多