2017-07-31 27 views
0

我基本上問的問題與問here相同。但問題尚未得到解答。如何在ExternalProject_Add()完成下載後使用add_subdirectory()?

我想在我的項目中使用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

使用'ExternalProject_Add()'添加的項目只在構建時被下載,IIRC。 – tambre

+1

[這裏是](https://github.com/Gluttton/munkres-cpp/blob/devel/tests/CMakeLists.txt)完整的依賴工作示例。 – Gluttton

回答

-1

您沒有正確地遵循該方法。作爲CMakeLists.txt.in文件中的最終命令,應該只有ExternalProject_Add()

CMakeLists.txt.in文件由外部CMakeLists.txt文件調用,以便通過execute_process()在配置時發生子項目處理。 CMakeLists.txt.in只是一個榮耀的下載者。

所以,所有其他命令如add_subdirectory()被添加到外部文件CMakeLists.txt

相關問題