我基本上问的问题是here。然而,问题没有得到解答。
我想在我的项目中使用googletest。为此,我使用ExternalProject_Add()使用git克隆测试套件。之后,我想使用add_subdirectory()
。
这也是official repository中描述的内容。这种方法的好处是,googletest中的构建脚本可以自己处理构建过程。
但问题是,add_subdirectory()
无法找到源文件夹,因为它从一开始就不存在。因此,add_subdirectory()
应取决于ExternalProject_Add()
的完成情况。
是否可以使add_subdirectory()
依赖于ExternalProject_Add()
,就像add_dependencies()对目标一样?
PS。如果我评论add_subdirectory()
,构建它(由于缺少googletest库而以错误结束),取消注释并再次构建(成功),我可以编译所有内容。
ExternalProject_Add(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG master
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)
ExternalProject_Get_Property(googletest source_dir binary_dir)
set(GTEST_INCLUDE_DIR ${source_dir}/googletest/include)
set(GMOCK_INCLUDE_DIR ${source_dir}/googlemock/include)
add_subdirectory(${source_dir}
${binary_dir})
答案 0 :(得分:1)
我用this tutorial完成了这一任务。只需将您的ExternalProject
代码放在一个单独的文件中,说“ CMakeLists.txt.dependencies”,然后使用execute_process
启动另一个cmake。我首先使用configure_file
将配置信息注入到外部项目中,然后将其复制到构建树中。
configure_file(CMakeLists.txt.dependency.in dependency/CMakeLists.txt)
execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/dependency" )
execute_process(COMMAND "${CMAKE_COMMAND}" --build .
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/dependency" )
答案 1 :(得分:-1)
您没有正确地遵循该方法。 ExternalProject_Add()
文件中只有CMakeLists.txt.in
作为最终命令。
外部CMakeLists.txt.in
文件调用CMakeLists.txt
文件,以便子项目处理在配置时通过execute_process()
进行。 CMakeLists.txt.in
只是一个美化的下载者。
因此,所有其他命令(如add_subdirectory()
)都会添加到外部CMakeLists.txt
文件中。