我目前对Google Protobuf图书馆有这个问题,但这是一个反复出现的问题,可能会发生在许多,如果不是所有第三方软件包,我想要建立和安装的源代码。
我正在为Windows开发,我们需要能够同时生成32位和64位版本的DLL。让CMake将我们自己的模块安装到特定于体系结构的子目录中相对简单,例如D:\libraries\bin\i686和d:\libraries\lib\i686 (和sim )。( bin)。但是我在像Protobuf这样的第三方图书馆实现同样的目标时遇到了困难。
当然,我可以使用不同的CMAKE_INSTALL_PREFIX和CMAKE_PREFIX_PATH组合(例如D:\libraries-i686和D:\libraries-x86_64 ),并且可能会最终做到这一点,但让我感到困扰的是,似乎没有更好的选择。文档 for find_package()清楚地表明,搜索过程确实尝试了特定于体系结构的搜索路径,那么为什么流行库的CMake文件通常似乎不支持安装到特定于体系结构的子目录呢?
或者这仅仅是一个设置正确的CMAKE_XXX变量的问题?
发布于 2019-06-26 10:23:37
多亏@arrowd为我指明了正确的方向,我现在得到了我的答案,尽管这不是我所希望的。
但是,CMAKE_LIBRARY_OUTPUT_DIRECTORY和CMAKE_RUNTIME_OUTPUT_DIRECTORY指定构建输出目录,而不是安装目录。然而事实证明,安装目录也有一些变量,称为CMAKE_INSTALL_BINDIR和CMAKE_INSTALL_LIBDIR --当选中"Advanced“时,它们在cmake接口中实际上是明显可见的(以及更多的)。
我尝试手动设置这两个文件( bin\i686和lib\i686),它起了作用: Protobuf INSTALL目标复制我想要它们的文件,也就是我的使用者项目的CMake脚本将以架构安全的方式找到它们的地方。
我不知道我对此有何看法--我更喜欢类似于CMAKE_INSTALL_ARCHITECTURE或CMAKE_ARCHITECTURE_SUBDIR变量的东西,CMake会自动将这些变量附加到相关的安装路径中。上面的解决方案需要重写的缺省值,而我更愿意保持不变。
在这种情况下,我的退路可能仍然是更好的选择。然而,这种方法需要很早就做出架构选择,通常是在运行脚本初始化特定于CMake的环境变量时,在配置构建目录时传递给cmake。更糟糕的是,使用cmake-gui时,需要用户手动设置所有目录。
最后,我还没决定。
https://stackoverflow.com/questions/56762316
复制相似问题