CMake(3.5.2)使用了非绝对的升压lib路径,并没有-L我的升压目录

时间:2016-10-23 23:48:05

标签: c++ boost linker cmake

我有一个安装了默认版本Boost的系统,我在/opt下安装了另一个版本。我用:

find_package(Boost 1.54.0 QUIET REQUIRED
    COMPONENTS
    system program_options regex filesystem
)

这会在/opt/etc/etc/include/opt/etc/etc/lib中为${Boost_INCLUDE_DIR}${Boost_LIBRARY_DIRS}提供。

我也用:

target_link_libraries(tester
    ${Boost_LIBRARIES}
    ${CUDA_LIBRARIES}
    ${CUDA_cupti_LIBRARY}
    nvToolsExt
    OpenCL
    cudadevrt
    # more stuff here
)

(如果你想知道,这不是CUDA链接的代码)

当Makefile执行时,我看到编译命令有-I/opt/etc/etc/include

但是,link命令并没有使用boost库的绝对名称,并且不会-L/opt/etc/etc/boost - 而对于其他库(CUDA库),它至少会{{1}适当的目录。

所以会发生的是链接器尝试使用我系统的升级库的默认版本。换句话说,链接命令如下所示:

-L

(是的,那里有冗余,但这不是问题。)

为什么会发生这种情况?

PS:我知道这不是一个MCVE,所以我要求"常见的补救措施"对于这样的问题。

修改:我已尝试将target_link_libraries命令切换为:

g++ -bunch -of -switches bunch.o of.o files.o -lboost_system
-lboost_program_options -lboost_regex -lboost_filesystem -Wl,-Bstatic
-lcudart_static -Wl,-Bdynamic -lpthread -ldl -lrt 
/usr/local/cuda/extras/CUPTI/lib64/libcupti.so -lnvToolsExt -lOpenCL
-lcudadevrt lib/morestuff.a -Wl,-Bstatic -lcudart_static -Wl,-Bdynamic
-lpthread -ldl -lrt -Wl,-rpath,/usr/local/cuda/extras/CUPTI/lib64

即。使用导入的目标。但我明白了:

target_link_libraries(tester
    Boost::system  Boost::program_options
    Boost::regex Boost::file_system
    ${CUDA_LIBRARIES} ${CUDA_cupti_LIBRARY} 
    nvToolsExt OpenCL cudadevrt ktkernels )

对于IMPORTED目标,或者缺少ALIAS目标,可能缺少find_package()调用?

1 个答案:

答案 0 :(得分:0)

这(解决方法?)有效:

set (CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} "-L${Boost_LIBRARY_DIRS}")
set (CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "-L${Boost_LIBRARY_DIRS}")

在CMakeLists.txt文件中。