CMake彼此依赖的库

时间:2013-11-12 15:19:01

标签: c cmake

project/
   CMakeList.txt // top level
   src/
   lib/
     CMakeList.txt // lib folder, builds all libraries
     lib1/
     lib2/

lib2依赖于lib1,它们的设置如下:

# Link the Unity library
include_directories(unity)
add_library(unity STATIC unity/unity.c unity/unity.h)

# Install the Unity library
install(TARGETS unity DESTINATION lib)
install(FILES unity.h DESTINATION includes)

# Include parallax libraries
include_directories(parallax)

# Simple text library
add_library(simpletext STATIC parallax/text/libsimpletext/libsimpletext.c parallax/libsimpletext/simpletext.h)
install(TARGETS simpletext DESTINATION lib)
install(FILES simpletext.h DESTINATION includes)

# Simple tools library
add_library(simpletools STATIC parallax/Utility/libsimpletools/libsimpletools.c)

target_link_libraries(simpletools simpletext)
target_link_libraries(unity simpletools)

install(TARGETS simpletools DESTINATION lib)
install(FILES simpletools.h DESTINATION includes)

但是在编译时,simpletext.h中找不到simpletools头文件。 如何以正确的方式添加头文件?

1 个答案:

答案 0 :(得分:2)

install作为单独的目标。在make文件中,它在Visual Studio中是make install,它是单独的项目。因此,您不应将编译所依赖的任何内容放在install上。如果需要在cmake运行期间复制文件,可以使用file(copy ...)。或者您可以只包含标题所包含的文件夹,而不是复制任何内容。我没有看到任何线索,你为什么要复制标题。

如果您需要在每次运行cmake命令时复制文件,则需要具备以下条件:

FILE(COPY simpletools.h DESTINATION includes)

但是,如果您在simpletools.h中有lib1并且需要将其包含在lib2中,则只需要在lib1 CMake文件中包含lib2文件夹:

INCLUDE_DIRECTORIES(lib2)