鉴于此cmake示例项目:
LIB1 /的CMakeLists.txt:
add_library(lib1 src1.cpp)
target_include_directories(lib1 PUBLIC include)
LIB2 /的CMakeLists.txt:
add_library(lib2 src2.cpp)
target_include_directories(lib2 PUBLIC include)
target_link_libraries(lib2 PRIVATE lib1)
LIB3 /的CMakeLists.txt:
add_library(lib3 src3.cpp)
target_include_directories(lib3 PUBLIC include)
target_link_libraries(lib3 PRIVATE lib2)
所有.cpp和.h文件都是虚拟文件,它们之间没有依赖关系。
根据我从文档中的理解,添加了一个" PRIVATE"从lib2到lib1的目标库意味着在编译lib3时不应添加lib1 include目录。但是,当使用cmake(3.3.2)和#34;启动编译时,使用VERBOSE = 1&#34 ;,命令行来编译" src3.cpp"包含" -I /.../ lib1 / include":
c++ -I/.../lib3/include -I/.../lib2/include -I/.../lib1/include -o .../src3.cpp.o -c /.../lib3/src3.cpp
我出错了什么?
答案 0 :(得分:2)
根据我从文档中的理解,添加了一个" PRIVATE" 从lib2到lib1的目标库意味着lib1包含目录 编译lib3时不应添加。
您的假设是正确的。
但是,由于遗产原因导致属性在依赖目标之间传播,因此在cmake_minimum_required
中指定旧版本时会停用此正确行为。
通过将版本更改为3.0或更高版本,您将获得正确的行为:
cmake_minimum_required(VERSION 3.0)
...