5 cmake
我有一个CMake项目,它构建一个依赖于另一个静态库的静态库.我想把这个静态库变成一个对象库.当我这样做时,我得到一个编译器错误,我想我有一些关于对象库的东西.
这是我想要实现的一个例子.MyLib和MyLib2都是静态库,MyLib使用在MyLib2中定义和声明的函数.
MyLib
CMakeList.txt
MyLib.h
MyLib.cpp
MyLib2
CMakeList.txt
MyLib2.h
MyLib2.cpp
Run Code Online (Sandbox Code Playgroud)
MyLib2 /的CMakeLists.txt:
cmake_minimum_required(VERSION 3.0)
project (MyLib2)
add_library(${PROJECT_NAME} OBJECT MyLib2.cpp)
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
Run Code Online (Sandbox Code Playgroud)
MyLib中/的CMakeLists.txt:
cmake_minimum_required(VERSION 3.0)
project (MyLib)
add_subdirectory(MyLib2)
add_library(${PROJECT_NAME} STATIC MyLib.cpp MyLib.h)
target_link_libraries(${PROJECT_NAME} MyLib2)
Run Code Online (Sandbox Code Playgroud)
MyLib.h包含MyLib2.h以使用它声明的函数.
#ifndef MyLib
#define MyLib
#include "MyLib2.h"
#endif
Run Code Online (Sandbox Code Playgroud)
当MyLib2构建为静态库时,我可以毫无问题地构建代码(我在Mac上使用make和clang).但是,当我将MyLib2转换为对象库时,我收到一个编译错误,指出无法找到MyLib2.h.
MyLib.h:4:10: fatal error: 'MyLib2.h'file not found
Run Code Online (Sandbox Code Playgroud)
以下是MyLib2是对象库时CMake文件的内容.
MyLib2 /的CMakeLists.txt:
cmake_minimum_required(VERSION 3.0)
project (MyLib2)
add_library(${PROJECT_NAME} OBJECT MyLib2.cpp)
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
Run Code Online (Sandbox Code Playgroud)
MyLib中/的CMakeLists.txt:
cmake_minimum_required(VERSION 3.0)
project (MyLib)
add_subdirectory(MyLib2)
add_library(${PROJECT_NAME} STATIC MyLib.cpp $<TARGET_OBJECTS:MyLib2>)
Run Code Online (Sandbox Code Playgroud)
当MyLib2是一个对象库时,我不明白为什么MyLib不再是MyLib2.h.也许使用target_include_directories的方式有问题.
这在评论中得到了回答:
\n\n@Clem:当您链接到 libary 目标时,您会使用其 INTERFACE_INCLUDE_LIBRARIES 属性,其中包含包含目录 Mylib2。当您通过 $ 使用对象库时,您不使用任何目标,因此不消耗任何属性。\xe2\x80\x93 齐瓦列夫
\n 归档时间: |
|
查看次数: |
2359 次 |
最近记录: |