相关疑难解决方法(0)

如何配置 CMakeLists.txt 以安装共享库的公共头文件?

我想使用 cmake 来安装我的库,edv但是当我执行时:

cmake --build . --target install
Run Code Online (Sandbox Code Playgroud)

它会安装,但只会创建bin/edv.dlllib/ < 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)

c++ cmake

11
推荐指数
2
解决办法
9202
查看次数

CMake 错误 - 目标 foo INTERFACE_SOURCES 属性包含以源目录为前缀的路径

我正在尝试创建一个可以通过 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)

c++ cmake

6
推荐指数
1
解决办法
1789
查看次数

标签 统计

c++ ×2

cmake ×2