这个答案假设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
. (如果需要,您可以使用SUFFIX
target 属性更改它。)
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时不会在工作目录中。