[英]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.dll
和libpq.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.cpp
、 CMakeLists.txt
和dependencies
項位於同一目錄中。
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.