簡體   English   中英

在 CMake 中添加 linker 標志並自動執行 gcc 命令

[英]Add linker flag in CMake and execute automatically a gcc command

也許這個線程可能與其他線程相似,但我需要一些幫助,因為我是 CMAKE 菜鳥。 我需要讓以下命令在我的 IDE (Clion) 中自動執行。

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

你可以想象,我的項目中名為“dependences”的目錄中有libpq.dlllibpq.lib

我現在的 CMakeList 是這樣的:

cmake_minimum_required(VERSION 3.15)
project(AccessoDB)

set(CMAKE_CXX_STANDARD 17)

add_executable(AccessoDB main.cpp)

target_link_libraries(AccessoDB pq)

但是我不知道如何獲取該目錄下的庫,以及如何在開頭添加命令。 提前致謝

此答案假定main.cppCMakeLists.txtdependencies項位於同一目錄中。

CMakeLists.txt文件已經涵蓋了命令行參數的所有部分,但-L dependencies/lib-o main除外。

您可以使用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目標屬性更改它。)

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 時不位於工作目錄中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM