我目前在Google Protobuf Library上遇到此问题,但这是一个经常出现的问题,如果不是我想从源代码构建和安装的许多第三方软件包,可能会发生。
我正在为Windows开发,我们需要能够生成DLL的32位和64位版本。让CMake将自己的模块安装到特定于体系结构的子目录是相对简单的,例如D:\libraries\bin\i686
和d:\libraries\lib\i686
(以及bin
的模拟值)。但是我很难通过Protobuf之类的第三方库实现相同的功能。
我当然可以使用不同的CMAKE_INSTALL_PREFIX
和CMAKE_PREFIX_PATH
组合(例如D:\libraries-i686
和D:\libraries-x86_64
,并且可能最终会那样做,但这让我感到困扰find_package()
的{{3}}清楚地表明,搜索过程确实尝试了特定于体系结构的搜索路径,因此,为什么通常看来流行的库的CMake文件似乎没有出现,所以似乎没有更好的选择。支持安装到特定于体系结构的子目录?
还是仅仅是设置正确的CMAKE_XXX
变量的问题?
答案 0 :(得分:0)
由于@arrowd指向正确的方向,我现在有了我的答案,尽管这并非我所希望的。
CMAKE_LIBRARY_OUTPUT_DIRECTORY
和CMAKE_RUNTIME_OUTPUT_DIRECTORY
,但是,指定 build 输出目录,而不是 install 目录。事实证明,安装目录也有变量,分别为CMAKE_INSTALL_BINDIR
和CMAKE_INSTALL_LIBDIR
-当“高级”为“高级”时,它们实际上在cmake-gui界面中清晰可见(以及更多)。已选中。
我尝试手动设置这两个(分别设置为bin\i686
和lib\i686
),并且可以正常工作:Protobuf INSTALL
目标将文件复制到我想要的位置,即CMake的位置我的消费者项目的脚本将以架构安全的方式找到它们。
我不确定我对此有何看法-我希望使用类似CMAKE_INSTALL_ARCHITECTURE
或CMAKE_ARCHITECTURE_SUBDIR
的变量,CMake会自动将它们附加到相关的安装路径中。上面的解决方案需要覆盖默认值,而我希望这些默认值保持不变。
在这种情况下,我的后备方法可能仍然是更好的选择。但是,该方法要求选择架构非常早,通常是在运行用于初始化CMake特定环境变量的脚本时,该脚本将在配置构建目录时传递给cmake
。而且使用cmake-gui
时更糟,这需要用户手动设置所有目录。
最后,我仍然不确定。