Ole*_*leg 5 c++ cmake c++11 cpp-core-guidelines guideline-support-library
// include/MyLib/MyModel.h
#include <memory>
#include <string>
#include "myEntity.h"
#include <gsl/gsl>
class MyModel {
public:
std::unique_ptr<MyEntity> load(std::string id);
bool store(gsl::not_null<MyEntity*> entity); // <---
}
Run Code Online (Sandbox Code Playgroud)
# CMakeLists.txt
# `git submodule add https://github.com/Microsoft/GSL.git dependency/gsl`
add_subdirectory(dependency/gsl EXCLUDE_FROM_ALL)
target_link_libraries(${PROJECT_NAME} INTERFACE GSL)
include(GNUInstallDirs)
install(
DIRECTORY ${CMAKE_SOURCE_DIR}/include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
# other install and CMake package stuff...
Run Code Online (Sandbox Code Playgroud)
之后make install我有我的库和头安装
/usr/local/lib/libMyLib.so.1.0.0
/usr/local/lib/libMyLib.so.1
/usr/local/lib/libMyLib.so
/usr/local/include/MyLib/MyModel.h
/usr/local/lib/cmake/MyLib/MyLib.cmake
/usr/local/lib/cmake/MyLib/MyLib-noconfig.cmake
/usr/local/lib/cmake/MyLib/MyLibConfig.cmake
/usr/local/lib/cmake/MyLib/MyLibConfigVersion.cmake
Run Code Online (Sandbox Code Playgroud)
/usr/local/lib/libMyLib.so.1.0.0
/usr/local/lib/libMyLib.so.1
/usr/local/lib/libMyLib.so
/usr/local/include/MyLib/MyModel.h
/usr/local/lib/cmake/MyLib/MyLib.cmake
/usr/local/lib/cmake/MyLib/MyLib-noconfig.cmake
/usr/local/lib/cmake/MyLib/MyLibConfig.cmake
/usr/local/lib/cmake/MyLib/MyLibConfigVersion.cmake
Run Code Online (Sandbox Code Playgroud)
客户将使用以下库:
# /usr/local/lib/cmake/MyLib/MyLibConfig.cmake
get_filename_component(MyLib_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
set( MyLib_INCLUDE_DIR "/usr/local/include" )
set( MyLib_INCLUDE_DIRS "/usr/local/include" )
message(STATUS "MyLib found. Headers: ${MyLib_INCLUDE_DIRS}")
Run Code Online (Sandbox Code Playgroud)
# CMakeLists.txt
cmake_minimum_required(VERSION 3.8)
project(MyLibTest)
add_executable(${PROJECT_NAME} main.cpp)
target_compile_features(${PROJECT_NAME} INTERFACE cxx_std_14)
find_package(MyLib 1.0 REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE MyLib)
Run Code Online (Sandbox Code Playgroud)
include/MyLib/gsl/并添加它作为单独的include目录中CMakeLists.txt和MyLibConfig.cmake,以防出现故障#include <gsl/...>sudo apt install libgsl-dev,find_package(GSL REQUIRED)但这是https://www.gnu.org/software/gsl/(名称冲突)我在github仓库上找不到与此相关的任何问题,因此应该有一个我错过的简单解决方案(对其他人显而易见)。
| 归档时间: |
|
| 查看次数: |
754 次 |
| 最近记录: |