2016-05-12 118 views
1

我使用cmake的PackageConfigHelpers'cmake的:Configure_file變量替換

configure_package_config_file(
     Config.cmake.in" 
     "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" 
     INSTALL_DESTINATION 
     .... 
     PATH_VARS 
     my_paths 
) 

如果my_path是對包括多條路徑,如:

set(my_paths path1 path2) 

配置文件將結束前綴僅路徑1和我將以:

${PACKAGE_PREFIX_DIR}path1;path2. 

這導致path2不是l ocatable。有沒有辦法解決這個問題,同時仍然使用PackageConfigHelpers提供的功能?

+0

將引號放在path1和path2周圍會發生什麼。例如,'set(my_paths「path1 path2」)' – sebenalern

回答

0

每個路徑應分配給其自己的變量,而這些變量應該enumarated爲PATH_VARS選項:

set(path1_var <...> CACHE ...) 
set(path2_var <...> CACHE ...) 

configure_package_config_file(
    "Config.cmake.in" 
    "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" 
    INSTALL_DESTINATION 
    .... 
    PATH_VARS 
    path1_var 
    path2_var 
) 

每個變量應該在Config.cmake.in爲特定類型的交付使用。

從文檔configure_package_config_file

變量< VAR1>到< VARN>給出PATH_VARS是包含安裝目的地的變量。對於他們每個人來說,宏將創建一個輔助變量PACKAGE_ < var ...>。在FooConfig.cmake.in文件中必須使用這些輔助變量來設置安裝的位置。它們由CONFIGURE_PACKAGE_CONFIG_FILE()計算,以便它們總是相對於軟件包的安裝位置。

+0

是的,這是真的,但在我的情況下這是不實際的。我問了在使用這個模塊的同時實現這個目標的可能方法。我想我應該使用它們作爲變量並手動添加前綴。我唯一擔心的是,如果前綴總是或者它可能更復雜。 – ShS

+0

'configure_package_config_file'旨在用於**可重定位的**包,因此它的每一個合適的都安裝在''下。如果您希望某些路徑超出該前綴,請不要在「PATH_VARS」選項中列出它們。 – Tsyvarev

+0

路徑是該目錄的子路徑。問題是我正在嘗試編寫一個模板,並且不希望顯式地將path1,path2等輸入到函數的輸入中,這是my_paths背後的意圖。我想我應該做什麼而不是將路徑作爲PATH_VARS傳遞,我應該將它們作爲單個變量寫入配置文件:'my_paths_var'並在配置文件中構建路徑。這將實現我的目標。 – ShS