0

也许这个线程可能与其他线程相似,但我需要一些帮助,因为我是一个 CMAKE 菜鸟。我需要让以下命令在我的 IDE (Clion) 中自动执行。

g++ main.cpp -L dependences/lib -lpq -o main

您可以想象,我的项目中有libpq.dll一个libpq.lib名为“dependences”的目录。

我现在的 CMakeList 是这样的:

cmake_minimum_required(VERSION 3.15)
project(AccessoDB)

set(CMAKE_CXX_STANDARD 17)

add_executable(AccessoDB main.cpp)

target_link_libraries(AccessoDB pq)

但是我不知道如何获取该目录下的库,以及如何在开头添加命令。提前致谢

4

1 回答 1

0

这个答案假设main.cpp,CMakeLists.txt并且dependencies在同一个目录中。

命令行参数的所有部分但是-L dependencies/lib-o main已经被CMakeLists.txt文件覆盖。

您可以使用该link_directories命令指定其他链接目录,但我个人更喜欢使用导入的库。

add_library(pq SHARED IMPORTED)
set_target_properties(pq PROPERTIES
    IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/lib/libpq.dll"
    IMPORTED_IMPLIB "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/lib/libpq.lib")

-o main可以通过更改OUTPUT_NAME(或RUNTIME_OUTPUT_NAME)目标属性来替换。请注意,这不会摆脱扩展;在这种情况下,您最终会得到main.exe. (如果需要,您可以使用SUFFIXtarget 属性更改它。)

set_target_properties(AccessoDB PROPERTIES OUTPUT_NAME main)

生成的 cmake 文件应如下所示。

cmake_minimum_required(VERSION 3.15)
project(AccessoDB)

set(CMAKE_CXX_STANDARD 17)

add_executable(AccessoDB main.cpp)
set_target_properties(AccessoDB PROPERTIES OUTPUT_NAME main)

# define the properties of pq library
add_library(pq SHARED IMPORTED)
set_target_properties(pq PROPERTIES
    IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/lib/libpq.dll"
    IMPORTED_IMPLIB "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/lib/libpq.lib")

#include directories could be added too
# target_include_directories(pq INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/include/pq")


target_link_libraries(AccessoDB pq)

请注意,运行exe时可能仍然存在问题,因为.dll它可能不在PATH环境变量中列出的目录中,并且在运行exe时不会在工作目录中。

于 2021-01-04T17:29:25.983 回答