【发布时间】:2012-06-28 07:21:29
【问题描述】:
我的项目结构如下:
- 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)
lib1/CMakeLists.txt 看起来像(剥离):
SET(SOURCE
file.cpp
)
SET(HEADERS
some_lib_header.h
)
add_library( lib1 ${SOURCE} ${HEADERS} )
除了 ADD_EXECUTABLE 之外,应用程序的外观相同:
SET(SOURCE
main.cpp
)
SET(HEADERS
some_header.h
)
add_library( lib1 ${SOURCE} ${HEADERS} )
ADD_EXECUTABLE( app ${SOURCE} ${HEADERS} )
我发现这种设置运行良好,因为这样,我可以生成一个包含所有这三个项目的 Visual Studio 解决方案文件。但我的问题是我的应用程序包含 lib1 的头文件(以及 lib2 的头文件,这取决于 lib1)。当我这样做时
$mkdir build
$cd build
$cmake -C ..\myproject
它会根据我的需要生成源外的 VS .sln 文件,但应用程序无法编译,因为它找不到 lib1 的头文件(显然)。
现在我阅读并尝试了很多东西,比如 TARGET_LINK_LIBRARIES( app lib1 )(它让应用程序与 lib1 链接,但没有解决标头包含问题),以及 CMakeLists.txt 中各种变体中的 add_subdirectory( ../lib1 ) app (都抛出了我无法修复的错误),还有 find_package (我猜这是错误的方法)。
那么我该如何解决这个(我猜很简单......)问题?
【问题讨论】:
标签: c++ visual-studio-2010 dependencies cmake header-files