首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向cmake添加libpqxx库

向cmake添加libpqxx库
EN

Stack Overflow用户
提问于 2018-08-01 12:54:36
回答 2查看 5.5K关注 0票数 3

我正在做我的c++简单项目,我在CMakelists.txt中遇到了一个关键的问题,我不能用不正确的方式链接libpqxx库,我花了两天时间来解决这个问题。我使用的是c++ 2017,cmakeVersion3.10,OSubuntu16.04,这是我的CMakelists.txt

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.10)
project(myserver)

set(CMAKE_CXX_STANDARD 17)

find_package(Boost)
IF (Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIR})
endif()

link_directories(/usr/local/lib)
include_directories(/usr/local/include)

file(GLOB_RECURSE SOURCE_FILES "src/*.cpp")


add_executable(myserver ${SOURCE_FILES})


TARGET_LINK_LIBRARIES(myserver  ${LIBRARIES})

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-03 09:39:22

不需要在cmake中构建libpqxx的libpqxx与cmake示例

设置环境

1.安装CMake

代码语言:javascript
复制
cd ~
wget https://github.com/Kitware/CMake/releases/download/v3.14.5/cmake-3.14.5.tar.gz
tar xf cmake-3.14.5.tar.gz
cd cmake-3.14.5
./bootstrap --parallel=10
make -j4
sudo make -j4 install

2.安装libpqxx

代码语言:javascript
复制
cd ~
git clone https://github.com/jtv/libpqxx.git
./configure
make -j4
sudo make install

如何建设

代码语言:javascript
复制
mkdir build
cd build
cmake ..
cmake --build .

如何运行

代码语言:javascript
复制
./main

Opened database successfully: postgres

项目

CMakeLists.txt

代码语言:javascript
复制
cmake_minimum_required (VERSION 3.10)
project(example VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

add_executable(main main.cpp)

target_link_libraries(main -lpqxx -lpq)

main.cpp

代码语言:javascript
复制
#include <iostream>
#include <pqxx/pqxx>

using namespace std;
using namespace pqxx;

int main(int argc, char *argv[])
{
    try
    {
        connection C("dbname = postgres user = postgres password = mysecretpassword \
      hostaddr = 127.0.0.1 port = 5433");
        if (C.is_open())
        {
            cout << "Opened database successfully: " << C.dbname() << endl;
        }
        else
        {
            cout << "Can't open database" << endl;
            return 1;
        }
    }
    catch (const std::exception &e)
    {
        cerr << e.what() << std::endl;
        return 1;
    }
}

libpqxx与cmake示例一起构建cmake中的libpqxx

设置环境

1.安装CMake

代码语言:javascript
复制
cd ~
wget https://github.com/Kitware/CMake/releases/download/v3.14.5/cmake-3.14.5.tar.gz
tar xf cmake-3.14.5.tar.gz
cd cmake-3.14.5
./bootstrap --parallel=10
make -j4
sudo make -j4 install

如何建设

代码语言:javascript
复制
mkdir build
cd build
cmake ..
cmake --build .

如何运行

代码语言:javascript
复制
./main

Opened database successfully: postgres

项目

CMakeLists.txt

代码语言:javascript
复制
include(FetchContent)

cmake_minimum_required (VERSION 3.10)
project(example VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

FetchContent_Declare(
  libpqxx
  GIT_REPOSITORY https://github.com/jtv/libpqxx.git
  GIT_TAG a6b1d60e74c1427c8ac2324b85cd4a0dc2068332
)
set(PQXX_LIBRARIES pqxx_static)

FetchContent_MakeAvailable(libpqxx)

add_executable(main main.cpp)

target_link_libraries(main "${PQXX_LIBRARIES}")

main.cpp

代码语言:javascript
复制
#include <iostream>
#include <pqxx/pqxx>

using namespace std;
using namespace pqxx;

int main(int argc, char *argv[])
{
    try
    {
        connection C("dbname = postgres user = postgres password = mysecretpassword \
      hostaddr = 127.0.0.1 port = 5433");
        if (C.is_open())
        {
            cout << "Opened database successfully: " << C.dbname() << endl;
        }
        else
        {
            cout << "Can't open database" << endl;
            return 1;
        }
    }
    catch (const std::exception &e)
    {
        cerr << e.what() << std::endl;
        return 1;
    }
}

源代码: https://github.com/sun1211/libpqxx-with-cmake-example

票数 2
EN

Stack Overflow用户

发布于 2018-08-01 18:21:41

我找到了解决办法。

代码语言:javascript
复制
   cmake_minimum_required(VERSION 3.10)

    project(myserver)

    set(CMAKE_CXX_STANDARD 17)

    find_package(Boost)
    IF (Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIR})
endif()

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lpqxx -lpq")

set(PQXX /usr/local/include/pqxx)

find_library(PQXX_LIB pqxx)
find_library(PQ_LIB pq)

file(GLOB_RECURSE SOURCE_FILES "src/*.cpp")


add_executable(myserver ${SOURCE_FILES})




TARGET_LINK_LIBRARIES(myserver  ${PQXX_LIB} ${PQ_LIB})

谢谢

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51633845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档