我正在尝试使用这个例子设置我的库和项目,比如使用ExternalProject_Add。
我有一个这样的图书馆:
lib
|-include
| |-a.hpp
|-src
| |-a.cpp
|-CMakeLists.txt使用以下CMakeLists.txt:
cmake_minimum_required(VERSION 2.8.0)
project(testlib)
file(GLOB_RECURSE SRCS src/*.cpp; src/*.c)
add_library(TestLib STATIC ${SRCS})
install(TARGETS TestLib DESTINATION ${PROJECT_SOURCE_DIR}/lib)我的项目如下:
app
|-src
| |-main.cpp
|-CMakeLists.txt使用以下CMakeLists.txt:
cmake_minimum_required(VERSION 2.8.11)
project(testapp)
file(GLOB_RECURSE SRCS src/*.cpp; src/*.c)
file(GLOB_RECURSE HDRS src/*.hpp; src/*.h)
include(ExternalProject)
ExternalProject_Add(
TestLib
PREFIX "contrib"
DOWNLOAD_DIR "contrib"
SOURCE_DIR "${PROJECT_SOURCE_DIR}/contrib/TestLib"
URL "../../lib.zip"
)
add_library(monoengine STATIC IMPORTED)
set_property(TARGET monoengine PROPERTY IMPORTED_LOCATION ${PROJECT_SOURCE_DIR}/contrib/TestLib/lib/libTestLib.a)
add_dependencies(monoengine TestLib)
add_executable(TestApp ${SRCS} ${HDRS})
include_directories(${PROJECT_SOURCE_DIR}/contrib/TestLib/include/)
target_link_libraries(TestApp monoengine)库安装正确,contrib/TestLib/lib中有contrib/TestLib/lib文件,contrib/TestLib/include中有.hpp文件
然而,在我的main.cpp中,我不能在<TestLib/a.hpp>中包括a.hpp,它只适用于"../contrib/TestLib/include/a.hpp"或<a.hpp>。
如何将它包含在<TestLib/a.hpp>中?
发布于 2015-03-10 16:00:55
可以将包含目录添加到导入目标的INTERFACE_INCLUDE_DIRECTORIES集合中。这样,当使用target_link_libraries添加依赖项时,您也会自动获得该依赖项的包含目录。请注意,此特性需要CMake 2.8.12或更高版本。
add_library(monoengine STATIC IMPORTED)
set_property(TARGET monoengine PROPERTY IMPORTED_LOCATION
${PROJECT_SOURCE_DIR}/contrib/TestLib/lib/libTestLib.a)
set_property(TARGET monoengine PROPERTY INTERFACE_INCLUDE_DIRECTORIES
${PROJECT_SOURCE_DIR}/contrib/TestLib/include)请注意,要使此操作有效,依赖项的源目录结构必须与包含目录结构匹配(也就是说,如果#include <TestLib/a.hpp>不在子目录TestLib中,则不能使用a.hpp )。如果这是一个问题,您可能需要在ExternalProject_Add调用中添加一个安装步骤,并从安装目标目录而不是源目录中包含安装步骤。
发布于 2016-01-31 15:26:35
我认为目前CMake中存在一个bug。请参阅https://cmake.org/Bug/view.php?id=15052
发布于 2019-03-04 16:50:21
(请访问@CosmicSansMS和@ up 1427799,对不起,不允许我发表评论.)
“导入目标包含不存在的路径”的解决方法是使用file (MAKE_DIRECTORY)手动创建文件夹,正如错误报告中所建议的那样。以下内容适用于我,使用CMake 3.10.2:
set (__include "${PROJECT_SOURCE_DIR}/contrib/TestLib/include")
file (MAKE_DIRECTORY ${__include})
set_property (TARGET monoengine PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${__include})https://stackoverflow.com/questions/28967951
复制相似问题