小编CvW*_*CvW的帖子

CMake FIND_PACKAGE成功但返回错误的路径

我正在尝试使用我的CMakeLists.txt中的以下代码将CMake 2.8.6链接到boost :: program_options

FIND_PACKAGE(Boost COMPONENTS program_options REQUIRED)
INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIR})

ADD_EXECUTABLE (segment segment.cpp)
TARGET_LINK_LIBRARIES (segment ${Boost_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)

find命令似乎成功但将错误的目录传递给链接器.该包实际上是:

`/usr/lib64/libboost_program_options-mt.so.5`
Run Code Online (Sandbox Code Playgroud)

CMakeFiles/segment.dir/link.txt列出以下内容:

/cm/shared/apps/gcc/4.4.6/bin/c++       CMakeFiles/segment.dir/segment.cpp.o  -o segment -rdynamic /usr/lib64/lib64/libboost_program_options-mt.so.5 -lpthread -lrt -Wl,-rpath,/usr/lib64/lib64
Run Code Online (Sandbox Code Playgroud)

注意lib64路径中的额外内容.此外,路径前面的-l标志似乎缺失.

运行CMake时,它报告它正确找到包,并且该{$Boost_LIBRARIES}变量似乎列出了正确的库:

Boost  found.
Found Boost components:
   program_options
${Boost_LIBRARIES} - optimized;boost_program_options-mt-shared;debug;boost_program_options-mt-shared-debug
Run Code Online (Sandbox Code Playgroud)

生成的CMakeCache.txt文件以:

//The directory containing a CMake configuration file for Boost.
Boost_DIR:PATH=/usr/lib64/boost

//Boost include directory
Boost_INCLUDE_DIR:FILEPATH=/usr/include
Run Code Online (Sandbox Code Playgroud)

这似乎是正确的.但是当运行make时它使用上面link.txt中的路径,我得到错误:

make[2]: *** No rule to make target `/usr/lib64/lib64/libboost_program_options-mt.so.5', needed by `segment'.  Stop.
make[1]: *** [CMakeFiles/segment.dir/all] Error 2
make: *** …
Run Code Online (Sandbox Code Playgroud)

c++ boost cmake

14
推荐指数
2
解决办法
9631
查看次数

标签 统计

boost ×1

c++ ×1

cmake ×1