cmake:相对链接目录

 2012-随意_544 发布于 2022-12-28 09:18

我正在尝试使用cmake构建我的项目,并且我在指定带有要链接的库的目录时遇到问题.

我的项目具有以下目录层次结构:

文件夹/ my_libs/libA/include
文件夹/ my_libs/libA/src
文件夹/ my_libs/libA/projects
文件夹/ my_libs/libA/unit_tests

folder/other_libs/devlib/include
文件夹/ other_libs/devlib/lib

3RD_PARTY_LIB/gtest-1.5.0/include
3RD_PARTY_LIB/gtest-1.5.0/lib
3RD_PARTY_LIB/pcre-8.02/include
3RD_PARTY_LIB/pcre-8.02/lib

3RD_PARTY_LIB 是环境变量,包含我使用的一些第三方库的路径.

问题出在unit_tests/CMakeLists.txt中 - 当我为include_directories指定包含它们的相对路径时,它们被正确处理,但是使用link_directories指定的相对路径处理错误.

这是我的makefile:

=================================
#folder/my_libs/libA/CMakeLists.txt

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project("libA")        
add_subdirectory(src)
add_subdirectory(unit_tests)

=================================
#folder/my_libs/libA/src/CMakeLists.txt

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)    
project("libA")

set(HDR_LIST ../include/AuxRoutines.h          
             ...
             ../include/utility.h)

set(SRC_LIST ModuleImpl.cpp 
             ..
             Version.cpp)

# add include dirs
include_directories("../include")
include_directories("../../../other_libs/devlib/include")

# disable some warnings
add_compile_options("/wd 4996")
...

# this command creates a new library from specified sources
add_library(libA STATIC ${SRC_LIST} ${HDR_LIST} )

=================================
#folder/my_libs/libA/unit_tests/CMakeLists.txt

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)    
project("sys_utils_tests")

set(SRC_LIST AuxiliaryRoutinesTests.cpp 
             ...
             UnitTests.h)

# add include dir
include_directories("../include")
include_directories("../../../other_libs/devlib/include")
include_directories($ENV{3RD_PARTY_LIB}/gtest-1.5.0/include)
include_directories($ENV{3RD_PARTY_LIB}/pcre-8.02/include)

# where to look for libs
link_directories(../../../other_libs/devlib/lib/)  
link_directories($ENV{3RD_PARTY_LIB}/gtest-1.5.0/lib/)  

# disable some warnings
add_compile_options("/wd 4996")
...

# make an executable from specified sources
add_executable(libATest ${SRC_LIST})

# libs to link with
target_link_libraries(libATest libA)
target_link_libraries(libATest gtestd.lib)
target_link_libraries(libATest devlibd.lib)

Vram Vardani.. 14

问题解决了.事实证明,link_directories()处理相对路径是由CMP0015策略定义的.

cmake_policy(SET CMP0015 NEW)

诀窍.

见 http://www.cmake.org/cmake/help/v3.0/policy/CMP0015.html

1 个回答
  • 问题解决了.事实证明,link_directories()处理相对路径是由CMP0015策略定义的.

    cmake_policy(SET CMP0015 NEW)
    

    诀窍.

    见 http://www.cmake.org/cmake/help/v3.0/policy/CMP0015.html

    2022-12-28 09:20 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有