首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在接口库中使用'target_sources‘命令?

如何在接口库中使用'target_sources‘命令?
EN

Stack Overflow用户
提问于 2018-04-24 15:55:08
回答 1查看 12.3K关注 0票数 3

我的项目被组织在子目录中(十几个),子目录之间有一些包含。其中一些子目录只包含头文件(例如dir1)。

以下是该项目的组织结构:

project
 |
 |----- src -- dir1  <-- header-only library
 |       |      |--- dir1.h
 |       |      |--- CMakeLists.txt
 |       |
 |       |
 |       | --- dir2
 |       |      |--- dir2.cpp
 |       |      |--- dir2.h
 |       |      |--- CMakeLists.txt
 |       |
 |       | --- file.h
 |       | --- CMakeLists.txt 
 |
 |
 |----- test -- dir1 -- test.cpp
 |       | ---- dir2 -- test.cpp
 |       | ---- includeFile.h
 |
 |
 |----- CMakeLists.txt

我希望有一个包含src目录中所有代码的库和一个运行单元测试的可执行文件。在对stackOverFlow和Cmake示例进行了一些研究之后,我找到了这些CMake文件。每个src子目录都有一个makefile,一个用于对所有库进行分组,另一个用于全局。

dir1 CMakeLists

add_library(dir1 INTERFACE)
target_sources(dir1 INTERFACE dir1.h)
target_include_directories(dir1 INTERFACE
  "${PROJECT_SOURCE_DIR}/src/dir1"
)

dir2 CMakeLists

set(dir2_src
  dir2.cpp dir2.h
)

add_library(dir2 ${dir2_src})

源CMakeLists

add_subdirectory(dir1)
add_subdirectory(dir2)


add_library(TheProject INTERFACE)
target_sources(TheProject INTERFACE file.h)
target_include_directories(TheProject INTERFACE
  "${PROJECT_SOURCE_DIR}/src/"
)
target_link_libraries(TheProject INTERFACE dir1
                                dir2
                                ${Boost_LIBRARIES})

主CMakeLists.txt

project(TheProject)

# gtest
# boost
# compilation flags ...

####### include paths
include_directories("./src/")
include_directories(${Boost_INCLUDE_DIRS})

####### library to compile
add_subdirectory(src)


####### executable
file(GLOB SRCS utest/*/*.cpp)
add_executable(utest ${SRCS} test/includeFile.h)

target_link_libraries(utest gtest_main TheProject)

我几乎在一个较小的项目中使用了相同的组织,没有头,只有库和接口,并且它起作用了。在这里,我有一个关于不同接口库的错误:

CMake Error at CMakeLists.txt:88 (add_executable):
  Cannot find source file:

    file.h

  Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
  .hxx .in .txx

我想我还没有很好地理解接口的用法。我做了一些研究,但没有解决我的问题。

我还有几个问题:

  • 目录之间有一些依赖关系(例如,dir1中的代码包含一些dir2文件),我应该在它们的cmake文件(使用target_link_libraries(dir2 dir1))中指定这些依赖关系吗?代码中的
  • 是用src和utest中的相对路径指定的,使用像"dir1/dir1.h"?

这样的路径不是更好吗

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49996260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档