Мой вопрос: в этот момент я связываю libre2 динамически, но я хочу сделать это статически. Я установил библиотеку в свой компьютер (sudo apt-get install libre2-dev), получил «двоичный» и связал этот двоичный «libre2.so» в своем исполняемом файле. Но я хочу git клонировать репозиторий или делать это с помощью подмодуля git, затем строить этот репозиторий и связывать его в моем проекте статически.как связать библиотеку re2 в моем проекте как статическую библиотеку с cmake
Я новичок здесь, и извините за мой плохой английский RSS'
1) моя структура проекта
- bin
- build
- external
- re2
- main.cpp
- CMakeLists.txt
- README.md
2) CMakeLists.txt
cmake_minimum_required(VERSION 2.6)
project(simmc-agent)
# version number
set (VERSION_MAJOR 0)
set (VERSION_MINOR 0)
# cpr requires c++11
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
# src : main
file (GLOB SOURCES *.cpp)
# linking res library dinamically
set(RE2_LIBRARIES -L${RE2_LIBRARY_DIR} -l libre2.so)
# src : collect functions - depend on OS
if (WIN32)
file (GLOB SOURCES ${SOURCES} src/windows/*.cpp)
else() # if(UNIX)
file (GLOB SOURCES ${SOURCES} src/linux/*.cpp)
endif()
# headers
include_directories ("include")
# test
option(PRINT_JSON "Set to ON to print json objects before sending" OFF)
message(STATUS "${PRINT_JSON}: ${${PRINT_JSON}}")
if (PRINT_JSON)
add_definitions (-DPRINT_JSON)
endif()
# compile
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "../bin")
add_executable (agent-v${VERSION_MAJOR}.${VERSION_MINOR} ${SOURCES})
target_link_libraries (agent-v${VERSION_MAJOR}.${VERSION_MINOR} ${RE2_LIBRARY})
3) main.cpp
#include <iostream>
#include <re2/re2.h>
using namespace std;
using namespace re2;
int main (int argc, char **argv) {
cout << "hello world" << endl;
int matchResult;
matchResult = RE2::FullMatch("hello", "h.*o");
cout << "matchResult = " << matchResult << endl;
return 0;
}
Чтобы скачать и построить re2 вы можете использовать 'ExternalProject_Add()'. Вы можете увидеть примеры для своего случая, посмотрев на эти два файла: [https://github.com/project-z/mutton/blob/master/ext/re2.cmake](https://github.com/project -z/mutton/blob/master/ext/re2.cmake) и [https://github.com/petewarden/tensorflow_makefile/blob/master/tensorflow/contrib/cmake/external/re2.cmake](https github.com/petewarden/tensorflow_makefile/blob/master/tensorflow/contrib/cmake/external/re2.cmake), которые также используют статическую библиотеку. – fedepad
Спасибо, что помогли мне. Я попробую, когда вернусь домой. После этого я дам отзывы. –
Эй, я проверил его, и у меня есть некоторые проблемы: «Невозможно было встретить -lexternal/re2/src/RE2/obj/so/libre2.so» –