【发布时间】:2016-11-03 17:21:43
【问题描述】:
我正在尝试学习如何制作共享库。以下似乎有效(如果您对此方法有一些反馈,请发表评论,我基本上不知道我在做什么)。
在我的库项目中,我将头文件放入名为“include”的文件夹中,将源文件放入“src”中。
我的库的 CMakeLists.txt:
cmake_minimum_required(VERSION 2.4.0)
project(mycustomlib)
# Find source files
file(GLOB SOURCES src/*.cpp)
# Include header files
include_directories(include)
# Create shared library
add_library(${PROJECT_NAME} SHARED ${SOURCES})
# Install library
install(TARGETS ${PROJECT_NAME} DESTINATION lib)
# Install library headers
file(GLOB HEADERS include/*.h)
install(FILES ${HEADERS} DESTINATION include)
我的应用程序的 CMakeLists.txt:
cmake_minimum_required(VERSION 2.4.0)
project(myprogram)
# Find source files
file(GLOB SOURCES src/*.cpp)
# Create executable
add_executable(${PROJECT_NAME} ${SOURCES})
# Find and link library
find_library(MYCUSTOMLIB mycustomlib)
target_link_libraries(${PROJECT_NAME} ${MYCUSTOMLIB})
这是工作。问题是我想将标题和库都放入子文件夹(特别是:/usr/local/include/mycustomlib/ 用于标题,/usr/local/lib/mycustomlib/ 用于库)。
这是我的尝试:
我的库的新 CMakeLists.txt:
cmake_minimum_required(VERSION 2.4.0)
project(mycustomlib)
# Find source files
file(GLOB SOURCES src/*.cpp)
# Include header files
include_directories(include)
# Create shared library
add_library(${PROJECT_NAME} SHARED ${SOURCES})
# Install library
install(TARGETS ${PROJECT_NAME} DESTINATION lib/${PROJECT_NAME})
# Install library headers
file(GLOB HEADERS include/*.h)
install(FILES ${HEADERS} DESTINATION include/${PROJECT_NAME})
我的应用程序的新 CMakeLists.txt:
cmake_minimum_required(VERSION 2.4.0)
project(myprogram)
# Find source files
file(GLOB SOURCES src/*.cpp)
# Create executable
add_executable(${PROJECT_NAME} ${SOURCES})
# Find and link library
find_library(MYCUSTOMLIB mycustomlib/mycustomlib)
target_link_libraries(${PROJECT_NAME} ${MYCUSTOMLIB})
这是不工作。现在,我不得不像这样指定库的 .so 文件:
find_library(MYCUSTOMLIB mycustomlib/libmycustomlib.so)
怎么会?
【问题讨论】:
标签: c++ cmake shared-libraries