我想用boost 1.69编译(c++/cmake)代码。我在centos 7上。
之后:
sudo yum install boost-devel.x86.64
该代码编译良好,但使用的是默认版本1. 53。
如果我查看安装在/lib 64中的库,我会看到例如:
>> ls -al /lib64/ | grep boost_timer
lrwxrwxrwx. 1 root root 27 Jun 9 11:50 libboost_timer-mt.so -> libboost_timer-mt.so.1.53.0
-rwxr-xr-x. 1 root root 19848 Apr 1 04:26 libboost_timer-mt.so.1.53.0
也可以安装Boost 1.69的yum。所以我可以:
sudo yum install boost169-devel.x86_64
例如更新/lib 64/
>> ls -al /lib64/ | grep boost_timer
lrwxrwxrwx. 1 root root 27 Jun 9 11:50 libboost_timer-mt.so -> libboost_timer-mt.so.1.53.0
-rwxr-xr-x. 1 root root 19848 Apr 1 04:26 libboost_timer-mt.so.1.53.0
lrwxrwxrwx. 1 root root 24 Jun 9 11:50 libboost_timer.so -> libboost_timer.so.1.53.0
-rwxr-xr-x. 1 root root 19848 Apr 1 04:26 libboost_timer.so.1.53.0
-rwxr-xr-x. 1 root root 24104 Apr 23 2019 libboost_timer.so.1.69.0
同时:
>> ls /usr/include/ | grep boost
boost
boost169
此时,我的工作区仍在编译,但仍使用1.53。
我希望我的工作区使用1.69编译。我可以通过拙劣的FindBoost.cmake来实现这一点,但这并不像是一件干净的事情。
此外,我尝试(yum)删除boost-dev.x86-64,它删除了文件夹/usr/include/boost和/lib 64中的相关so文件,例如:
>> ls -al /lib64/ | grep boost_timer
libboost_timer-mt.so.1.53.0
libboost_timer.so.1.53.0
libboost_timer.so.1.69.0
(note不再有“libboost_timer-mt. so”)
此时,我相信我还可以通过手动创建符号链接/usr/include/boost和/lib 64/libboost_* 来编译我的工作区。所以,但这也不像是一件干净的事情
(note:我创建了指向/usr/include/boost 64/boost的符号链接/usr/include/boost,并且cmake确实停止了对BOOST_INCLUDE_DIR的抱怨,但是因为我没有为库创建符号链接,所以cmake仍然抱怨这些)。
是否有一种更干净的替代方法来手动创建符号链接?
编辑:我确实为编译器抱怨的所有与boost相关的库手动创建了符号链接,我可以确认这是有效的。
2条答案
按热度按时间abithluo1#
显然,您可以使用
BOOST_INCLUDE_DIR
来控制在何处提升标题,因此,为什么不ruyhziif2#
与设置CMake的缺省值最接近的方法是将
BOOST_INCLUDEDIR
和BOOST_LIBRARYDIR
设置为环境变量。FindBoost.cmake
显式地在环境中查找这些变量(默认情况下CMake不会这么做)。因此,您可以在某个位置全局使用export BOOST_INCLUDEDIR=/usr/include/boost169
和export BOOST_LIBRARYDIR=/usr/lib64/boost169
,或者您也可以使用以下内容 Package 命令调用:BOOST_INCLUDEDIR=/usr/include/boost169 BOOST_LIBRARYDIR=/usr/lib64/boost169 ./mybuild.sh
(当然,假设mybuild.sh
最终调用CMake或自己处理这些环境变量)。