如何在 CMake 中添加“-l”(ell)编译器标志

How to add "-l" (ell) compiler flag in CMake

工作 Ubuntu 16

我使用 g++ main.cpp -lpq 命令编译我的小项目。现在我使用 Clion 并想做与 g++ 相同的事情。但是我无法在 cmake 文件中添加编译器标志并出现编译错误。

cmake_minimum_required(VERSION 3.5.1)
project(day_g)

set(CMAKE_CXX_FLAGS "-lpq")

add_definitions(-lpq)

message("CMAKE_CXX_FLAGS is ${CMAKE_CXX_FLAGS}")

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp)
add_executable(day_g ${SOURCE_FILES})

此外,我 运行 仅 cmake 文件并使用 -lpq 标志获得 CMAKE_CXX_FLAGS

CMAKE_CXX_FLAGS is -lpq
-- Configuring done
-- Generating done

如何正确地将编译器标志添加到 cmake 文件?

Flag -l 用于 linker,不适用于 compiler。此标志用于 link 与库。为此,CMake 有特殊的命令 target_link_libraries

target_link_libraries(day_g pq)

-lq 不是编译器标志 (CFLAGS),而是 linker 标志。

要在 CMake 项目中传递库,您应该使用:

target_link_libraries(target_name libraries...)

请注意,如果您指定 'q' 作为库,项目将 link 和 libq.a 或者,如果您在 windows q.dll.

...在您的 CMakeLists.txt 中要添加的正确行是:

target_link_libraries(day_g pq)

另请注意,当您添加 CFLAG 时,您还应该 "remember" 之前可能由图书馆或您的平台添加的那些,即:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")

要检查 cmake 传递给编译器或 linker 的确切标志,您始终可以 运行,从构建目录中执行以下命令:

make VERBOSE=1