2016-05-12 110 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