强制CMake将目标安装到特定于体系结构的目录?

时间:2019-06-25 21:34:53

标签: cmake

我目前在Google Protobuf Library上遇到此问题,但这是一个经常出现的问题,如果不是我想从源代码构建和安装的许多第三方软件包,可能会发生。

我正在为Windows开发,我们需要能够生成DLL的32位和64位版本。让CMake将自己的模块安装到特定于体系结构的子目录是相对简单的,例如D:\libraries\bin\i686d:\libraries\lib\i686(以及bin的模拟值)。但是我很难通过Protobuf之类的第三方库实现相同的功能。

我当然可以使用不同的CMAKE_INSTALL_PREFIXCMAKE_PREFIX_PATH组合(例如D:\libraries-i686D:\libraries-x86_64,并且可能最终会那样做,但这让我感到困扰find_package()的{​​{3}}清楚地表明,搜索过程确实尝试了特定于体系结构的搜索路径,因此,为什么通常看来流行的库的CMake文件似乎没有出现,所以似乎没有更好的选择。支持安装到特定于体系结构的子目录?

还是仅仅是设置正确的CMAKE_XXX变量的问题?

1 个答案:

答案 0 :(得分:0)

由于@arrowd指向正确的方向,我现在有了我的答案,尽管这并非我所希望的。

CMAKE_LIBRARY_OUTPUT_DIRECTORYCMAKE_RUNTIME_OUTPUT_DIRECTORY,但是,指定 build 输出目录,而不是 install 目录。事实证明,安装目录也有变量,分别为CMAKE_INSTALL_BINDIRCMAKE_INSTALL_LIBDIR-当“高级”为“高级”时,它们实际上在cmake-gui界面中清晰可见(以及更多)。已选中。

我尝试手动设置这两个(分别设置为bin\i686lib\i686),并且可以正常工作:Protobuf INSTALL目标将文件复制到我想要的位置,即CMake的位置我的消费者项目的脚本将以架构安全的方式找到它们。

我不确定我对此有何看法-我希望使用类似CMAKE_INSTALL_ARCHITECTURECMAKE_ARCHITECTURE_SUBDIR的变量,CMake会自动将它们附加到相关的安装路径中。上面的解决方案需要覆盖默认值,而我希望这些默认值保持不变。

在这种情况下,我的后备方法可能仍然是更好的选择。但是,该方法要求选择架构非常早,通常是在运行用于初始化CMake特定环境变量的脚本时,该脚本将在配置构建目录时传递给cmake。而且使用cmake-gui时更糟,这需要用户手动设置所有目录。

最后,我仍然不确定。

相关问题