Skip to content

Instantly share code, notes, and snippets.

@Fat83dotcom
Last active February 11, 2024 04:33
Show Gist options
  • Save Fat83dotcom/d67ef7b4c8ad948df11e637e416eeaa7 to your computer and use it in GitHub Desktop.
Save Fat83dotcom/d67ef7b4c8ad948df11e637e416eeaa7 to your computer and use it in GitHub Desktop.
Configuração de um CMakeLists.txt para compilar a biblioteca C++ PQXX (versão 7.6.2) no Ubuntu 22.04 - PostgreSQL
#-- Esta versão da lib somente suporta c++20 ou superior
cmake_minimum_required(VERSION 3.0.0)
project(nome_do_projeto_cmake VERSION 0.1.0 LANGUAGES C CXX)
#-- Adiciona o caminho para o arquivo FindPQXX.cmake
list(APPEND CMAKE_MODULE_PATH "caminho para o arquivo FindPQXX.cmake")
#-- Seta flags para o compilador
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20 -lpqxx -lpq -lfmt")
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include(CTest)
enable_testing()
add_executable(nome_do_projeto_cmake main.cpp)
#-- Parteresponsavel pela lib pqxx
find_package(PostgreSQL REQUIRED)
include_directories(${PostgreSQL_INCLUDE_DIRS})
link_directories(${PostgreSQL_LIBRARY_DIRS})
#-- Vincula a biblioteca na compilação
find_package(PQXX REQUIRED)
target_include_directories(nome_do_projeto_cmake PUBLIC ${PQXX_INCLUDE_DIRS})
target_link_libraries(nome_do_projeto_cmake ${PQXX_LIBRARIES})
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)
#[=======================================================================[.rst:
FindPQXX
-----------------------------
Find PostGreSQL C++ library and header file
Sets
PQXX_FOUND to 0 or 1 depending on result
PQXX_INCLUDE_DIR to the pqxx include path
PQXX_INCLUDE_DIRECTORIES to the pqxx include path
PQXX_LIBRARY to the pqxx client library
PQXX_LIBRARIES to the pqxx client library and required dependencies
Sample Usage:
find_package(PQXX)
find_package(PQXX 6.3)
#]=======================================================================]
include(FindPackageHandleStandardArgs)
set(PostgreSQL_TYPE_INCLUDE_DIR /usr/include/postgresql)
if(PQXX_FIND_REQUIRED)
find_package( PostgreSQL REQUIRED )
else()
find_package( PostgreSQL )
endif()
if ( PostgreSQL_FOUND )
file( TO_CMAKE_PATH "$ENV{PQXX_DIR}" _PQXX_DIR )
find_library( PQXX_LIBRARY
NAMES libpqxx pqxx
HINTS ENV PQXX_DIR
PATHS
${_PQXX_DIR}/lib
${CMAKE_INSTALL_PREFIX}/lib
${CMAKE_INSTALL_PREFIX}/bin
/usr/local/pgsql/lib
/usr/local/lib
/usr/lib
PATH_SUFFIXES ${CMAKE_LIBRARY_ARCHITECTURE}
DOC "Location of libpqxx library"
NO_DEFAULT_PATH
)
find_path( PQXX_INCLUDE_DIR
NAMES pqxx
HINTS ENV PQXX_DIR
PATHS
${_PQXX_DIR}/include
${CMAKE_INSTALL_PREFIX}/include
/usr/local/pgsql/include
/usr/local/include
/usr/include
DOC "Path to pqxx/pqxx header file. Do not include the 'pqxx' directory in this value."
NO_DEFAULT_PATH
)
endif ( PostgreSQL_FOUND )
if( PQXX_INCLUDE_DIR )
file(STRINGS ${PQXX_INCLUDE_DIR}/pqxx/version.hxx PQXX_VERSION_DEFINE REGEX "PQXX_VERSION ")
string(REGEX MATCH "[0-9]+.[0-9]+.[0-9]+" PQXX_VERSION ${PQXX_VERSION_DEFINE})
else()
set(PQXX_VERSION "")
endif()
find_package_handle_standard_args(PQXX REQUIRED_VARS PQXX_LIBRARY PQXX_INCLUDE_DIR
VERSION_VAR PQXX_VERSION)
set( PQXX_INCLUDE_DIRECTORIES "${PQXX_INCLUDE_DIR};${PostgreSQL_INCLUDE_DIR}" CACHE STRING "Include directories for PostGreSQL C++ library" FORCE )
set( PQXX_LIBRARIES "${PQXX_LIBRARY};${PostgreSQL_LIBRARY}" CACHE STRING "Link libraries for PostGreSQL C++ interface" FORCE )
mark_as_advanced(FORCE PQXX_INCLUDE_DIRECTORIES)
mark_as_advanced(FORCE PQXX_LIBRARIES)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment