如何解决cmake target_include_directories PUBLIC对对象库不起作用
lib1-CMakeLists.txt
add_library(lib1_objs OBJECT
hello.cpp
hello.h
)
target_include_directories(lib1_objs
PUBLIC ../third
)
add_library(lib1 STATIC $<TARGET_OBJECTS:lib1_objs>)
hello.h
#include<test.h> //Path: ../third/test.h
...
exe-CMakeLists.txt
add_executable(exe
main.cpp
)
target_link_libraries(exe
PRIVATE lib1
)
target_include_directories(lib1_objs
PRIVATE ../lib1
)
main.cpp
#include "hello.h"
...
当我构建'exe'时,它将显示错误
../lib1/hello.h:2 fatal error test.h No such file or directory
我已经在lib1-CMakeLists.txt中包含了'../third'目录PUBLIC。但是它没有将其宣传到exe-CMakeLists.txt。我该如何解决?
解决方法
只需实际链接到对象库:
lib1 / CMakeLists.txt:
add_library(lib1 OBJECT
hello.cpp
hello.h
)
target_include_directories(lib1
PUBLIC ../third
)
CMakeLists.txt:
add_subdirectory(lib1)
add_executable(exe
main.cpp
)
target_link_libraries(exe
PRIVATE lib1
)
$<TARGET_OBJECTS>
只是对象文件-他们不知道包含目录等。
您还可以:
lib1 / CMakeLists.txt:
add_library(lib1_objs OBJECT
hello.cpp
hello.h
)
target_include_directories(lib1_objs
PUBLIC ../third
)
add_library(lib1 STATIC) # I think it works,if not create an empty source file
target_link_libraries(lib1 PUBLIC lib1_objs)
CMakeLists.txt:
add_subdirectory(lib1)
add_executable(exe
main.cpp
)
target_link_libraries(exe
PRIVATE lib1
)
但是随后lib1_objs
可以被删除。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。