2016-02-23 100 views
2

我用我的CMakeLists.txtExternalProject_Add命令添加一些外部項目。我想檢索一些項目屬性(正是我想從Find<package>.cmake獲得預處理器定義,如<project>_DEFINITIONS)。cmake的外部項目屬性列表

有沒有辦法讓所有允許的項目屬性使用作爲ExternalProject_Get_property命令參數?例如,我知道source_dirbinary_dir,我。即是這樣的:

ExternalProject_Get_property(<my project> binary_dir)

或者有什麼辦法可以下載過外部項目後,立即使用find_package功能?我肯定知道該項目的find_package在啓動構建後工作(即,在已經配置了外部項目之後)。它會自動設置所有必要的變量(如<project>_DEFINITIONS),但顯然find_package(<project>)最初不可用(即在配置外部項目之前)。

回答

2

當您下載外包裝,你只其來源。 CMake沒有常用的方法來僅使用其源來提取關於包的信息。

唯一來源

功能ExternalProject_Get_property返回它們設置通過ExternalProject_Add調用本身的屬性。外部項目甚至沒有在此調用中配置,因此您無法獲取有關該包的任何信息。

配置

有命令export,其允許配置的外部包發佈關於它的一些目標的信息。

安裝

命令find_package需要(通常)被已安裝的包。

+0

好的,謝謝。在構建項目源代碼樹本身之前,是否有任何方法可以強制* configuration *或* building *用於外部項目**? – avtomaton

+0

命令[execute_process](https://cmake.org/cmake/help/v3.0/command/execute_process.html)在配置階段立即*執行其操作*。如果你在**'find_package'之前調用這個命令**並且說它建立了外部項目,那麼'find_package'就會找到這個項目。 – Tsyvarev