我想使用 cmake 来安装我的库,edv但是当我执行时:
cmake --build . --target install
Run Code Online (Sandbox Code Playgroud)
它会安装,但只会创建bin/edv.dll和lib/ < empty >。我怎样才能让 cmake 安装在EDV_PUBLIC_INCLUDE_DIRECTORIES里面include/...?
这是我的CMakeLists.txt:
cmake_minimum_required(VERSION 3.12)
project(edv)
# include PUBLIC directories
set(EDV_PUBLIC_INCLUDE_DIRECTORIES include/ )
set(EDV_PRIVATE_INCLUDE_DIRECTORIES src/ )
# Edv source files list
file(GLOB_RECURSE EDV_SOURCE_FILES "src/*.cpp" "src/*.hpp*")
# build the library
add_library(${PROJECT_NAME} SHARED ${EDV_SOURCE_FILES} )
target_include_directories(${PROJECT_NAME} PUBLIC ${EDV_PUBLIC_INCLUDE_DIRECTORIES})
target_include_directories(${PROJECT_NAME} PRIVATE ${EDV_PRIVATE_INCLUDE_DIRECTORIES})
install (TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
PUBLIC_HEADER DESTINATION include
)
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个可以通过 CMake 重用的 C++ 库。当我尝试为项目安装导出文件时失败。我不明白为什么。这是我得到的错误。
Target "Proj_LibA" INTERFACE_SOURCES property contains path:
"C:/projects/cmake_temp/src/libA/include/liba.hpp"
which is prefixed in the source directory.
Run Code Online (Sandbox Code Playgroud)
阅读 CMake 文档和其他stackoverflow帖子意味着我设置源文件路径和/或包含目录的方式有问题。这是一个重现我的问题的 SSCE。
文件夹结构
cmake_temp/
/build
/install
/src/
/CMakeLists.txt
/src/libA/
/include/liba.hpp
/CMakeLists.txt
/liba.cpp
/LibAConfig.cmake.in
Run Code Online (Sandbox Code Playgroud)
/src/CMakeLists.txt
cmake_minimum_required (VERSION 3.15)
project("TestProj")
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
set(include_install_dir ${CMAKE_INSTALL_PREFIX}/include/)
set(export_cmake ${CMAKE_INSTALL_PREFIX}/cmake)
set(lib_install_dir ${CMAKE_INSTALL_PREFIX}/lib)
set(bin_install_dir ${CMAKE_INSTALL_PREFIX}/bin)
add_subdirectory(libA)
#add_subdirectory(exec)
Run Code Online (Sandbox Code Playgroud)
liba/include/liba.hpp
#ifndef liba
#define liba
#include "LibA_export.hpp"
class PROJ_LIBA_EXPORT Foo
{
public:
Foo(const int bias);
int add(int a, int b);
private: …Run Code Online (Sandbox Code Playgroud)