相关疑难解决方法(0)

CMake - 同一项目中的应用程序/库之间的依赖关系(标头)

我有以下项目结构:

  • 的CMakeLists.txt
    • lib1/CMakeLists.txt以及lib的所有cpp和头文件
    • lib2/CMakeLists.txt以及lib的所有cpp和头文件
    • app/CMakeLists.txt以及该应用的所有cpp和头文件

主要的CMakeLists.txt看起来像:

PROJECT( ${PROJECT_NAME} )
add_subdirectory(lib1)
add_subdirectory(lib2)
add_subdirectory(app)
Run Code Online (Sandbox Code Playgroud)

lib1/CMakeLists.txt看起来像(剥离):

SET(SOURCE
file.cpp
)
SET(HEADERS
    some_lib_header.h
)
add_library( lib1 ${SOURCE} ${HEADERS} )
Run Code Online (Sandbox Code Playgroud)

除了ADD_EXECUTABLE之外,app的应用程序看起来相同:

SET(SOURCE
main.cpp
)
SET(HEADERS
    some_header.h
)
add_library( lib1 ${SOURCE} ${HEADERS} )
ADD_EXECUTABLE( app ${SOURCE} ${HEADERS} )
Run Code Online (Sandbox Code Playgroud)

我发现这个设置运行良好,因为我可以生成一个包含所有这三个项目的Visual Studio解决方案文件.但我的问题是我的应用程序包含lib1的头文件(以及lib2的头文件,它依赖于lib1).当我做

$mkdir build
$cd build
$cmake -C ..\myproject
Run Code Online (Sandbox Code Playgroud)

它会根据我的需要生成源外VS.sln文件,但是应用程序无法编译,因为它无法找到lib1的头文件(显然).

现在我阅读并尝试了很多东西,比如TARGET_LINK_LIBRARIES( app lib1 )(它让应用程序与lib1链接,但没有解决头部包含问题),以及add_subdirectory( ../lib1 )各种变体,如应用程序的CMakeLists.txt(这些都抛出了我无法解决的错误)不修复,还有find_package(我猜这是错误的方法).

那么如何解决这个问题(我想简单......)问题呢?

c++ dependencies cmake header-files visual-studio-2010

17
推荐指数
2
解决办法
3万
查看次数