我的问题:在这一刻,我将libre2链接起来,但我想静态地做到这一点。我将库安装在我的PC(sudo apt-get install libre2-dev)中,得到了“二进制”,并将此二进制“ libre2.so”链接在我的可执行文件中。但是我想git克隆存储库或通过git subpodule做到这一点,然后构建此存储库并静态地将其链接在我的项目中。 我在这里新来,对不起,我的英语不好。
我的项目结构
build
SET(version_major 0)
set(version_minor 0)CPR需要C ++11
SET(cmake_cxx_flags“ $ {cmake_cxx_flags} -std = c ++ 11”)
file(全球源 *.cpp)
SRC:收集功能 - 依赖OS
file(glob sources $ {sources} src/windows/windows/
.cpp)endif()
Headers -Test
option(print_json“在发送之前设置为打印json对象”
消息(状态“ $ {print_json}:$ {$ {print_json}}”)
如果(print_json)
add_definitions(-dprint_json)
endif()
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})
main.cpp
#包括
#include
使用名称空间RE2;
IntMatchResult;
MatchResult= Re2 :: FullMatch(“ Hello”,“H。*O”);
cout
return 0;
}
<< "hello world" << endl;
Edit-(26.01.17):大家好。我在这里谈论我如何解决它。 按照一些提示提供了此处的提示,我创建了一个名为
re2.cmake
:<< "matchResult = " << matchResult << endl;
的文件。cmake_minimum_required ( VERSION 2.8.7 )
if (NOT RE2_NAME)
include (ExternalProject)
SET (RE2_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/re2/src/re2/)
SET (RE2_EXTRA_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/re2/src/re2/)
SET (RE2_URL https://github.com/google/re2.git)
SET (RE2_BUILD ${CMAKE_BINARY_DIR}/re2/src/re2)
SET (RE2_LIBRARIES ${RE2_BUILD}/obj/so/libre2.so)
get_filename_component(RE2_STATIC_LIBRARIES ${RE2_BUILD}/libre2.a ABSOLUTE)
SET (RE2_INCLUDES ${RE2_BUILD})
if ( WIN32 )
SET (RE2_STATIC_LIBRARIES ${RE2_BUILD}/${CMAKE_BUILD_TYPE}/re2.lib)
else ()
SET (RE2_STATIC_LIBRARIES ${RE2_BUILD}/libre2.a)
endif ()
ExternalProject_Add(RE2
PREFIX RE2
GIT_REPOSITORY ${RE2_URL}
# GIT_TAG ${RE2_TAG}
DOWNLOAD_DIR "${DOWNLOAD_LOCATION}"
BUILD_IN_SOURCE 1
INSTALL_COMMAND sudo make install
CMAKE_CACHE_ARGS
-DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_VERBOSE_MAKEFILE:BOOL=OFF -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON
)
## put re2 includes in the directory where they are expected
add_custom_target(re2_create_destination_dir COMMAND ${CMAKE_COMMAND} -E make_directory ${RE2_INCLUDE_DIR}/re2 DEPENDS re2)
add_custom_target(re2_copy_headers_to_destination DEPENDS re2_create_destination_dir)
foreach(header_file ${RE2_HEADERS})
add_custom_command(TARGET re2_copy_headers_to_destination PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${header_file} ${RE2_INCLUDE_DIR}/re2)
endforeach ()
ADD_LIBRARY(RE2_LIB STATIC IMPORTED DEPENDS RE2)
SET_TARGET_PROPERTIES(RE2_LIB PROPERTIES IMPORTED_LOCATION ${RE2_STATIC_LIBRARIES})
endif (NOT RE2_NAME)
本文件下载存储库,在我的计算机中构建和安装库Libre2。该库具有线程库*的依赖性*(我认为所有Linux操作系统都随附此库)。
但是,有问题:如果我是root用户,我才这样做。因为库使用了“ make install”命令并执行此操作,所以您需要成为root用户。 我的项目结构:- bin
- build
- src
- include
- modules
- re2.cmake
- CMakeLists.txt
cmake_minimum_required ( VERSION 2.8.7 )
project ( project C CXX)
# version number
SET ( VERSION_MAJOR 0 )
SET ( VERSION_MINOR 0 )
SET ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" )
# src : main
file ( GLOB SOURCES src/main.cpp )
# headers
include_directories ( "include" )
# src : libre2 - Download, build and install the library
find_package (Threads)
include ( "modules/re2.cmake" )
set(RE2_STATIC_LIBRARIES -L${RE2_LIBRARY_DIR} -l libre2.a )
# compile
set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY "../bin" )
add_executable ( project-v${VERSION_MAJOR}.${VERSION_MINOR} ${SOURCES})
target_link_libraries ( project-v${VERSION_MAJOR}.${VERSION_MINOR} ${RE2_STATIC_LIBRARIES})
add_dependencies(project-v${VERSION_MAJOR}.${VERSION_MINOR} RE2)
target_link_libraries (project-v${VERSION_MAJOR}.${VERSION_MINOR} ${CMAKE_THREAD_LIBS_INIT})
我的新
CmakeLists.txt
cmake_minimum_required( VERSION 2.8.7 )
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 )
# libre2
if (NOT RE2_NAME)
include (ExternalProject)
set(ABBREV "RE2")
set(EXT_PREFIX "external/re2" )
set(${ABBREV}_NAME ${ABBREV})
set(${ABBREV}_INCLUDE_DIRS ${EXT_PREFIX}/src/re2/)
set(APP_DEPENDENCIES ${APP_DEPENDENCIES} ${ABBREV})
message("Installing ${RE2_NAME} into ext build area: ${EXT_PREFIX} ...")
ExternalProject_Add(RE2
PREFIX ${EXT_PREFIX}
URL https://re2.googlecode.com/files/re2-20130115.tgz
URL_MD5 "ef66646926e6cb8f11f277b286eac579"
PATCH_COMMAND ""
CONFIGURE_COMMAND ""
BUILD_COMMAND make
INSTALL_COMMAND ""
BUILD_IN_SOURCE 1
)
set(CXXFLAGS CMAKE_CXX_FLAGS)
set(${ABBREV}_LIBRARIES ${EXT_PREFIX}/src/RE2/obj/so/libre2.so)
set(${ABBREV}_STATIC_LIBRARIES ${EXT_PREFIX}/src/RE2/obj/libre2.a)
set_target_properties(${RE2_NAME} PROPERTIES EXCLUDE_FROM_ALL ON)
endif (NOT RE2_NAME)
if(RE2_INCLUDE_DIRS AND RE2_LIBRARIES)
set(RE2_FOUND TRUE)
endif(RE2_INCLUDE_DIRS AND RE2_LIBRARIES)
if(RE2_FOUND)
message(STATUS "Found RE2: ${RE2_LIBRARIES}")
else(RE2_FOUND)
message(FATAL_ERROR "Could not find RE2 library.")
endif(RE2_FOUND)
set(INCLUDES ${INCLUDES} ${RE2_INCLUDE_DIRS} )
# set(LIBS ${LIBS} ${RE2_STATIC_LIBRARIES} )
# 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_LIBRARIES})