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

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

本文关键字:ell 编译器 标志 CMake 添加      更新时间:2023-10-16

在 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 文件?

标志

-l用于链接器,而不是编译器。此标志用于与库的链接。CMake 为此制定了特殊的命令target_link_libraries:

target_link_libraries(day_g pq)

-lq 不是编译器标志(CFLAGS(,而是链接器标志。

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

target_link_libraries(target_name libraries...)

请注意,如果您指定"q"作为库,则项目将与libq.a链接,或者,如果您在Windows q.dll上。

。在 CMakeList 中.txt要添加的正确行是:

target_link_libraries(day_g pq)

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

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

要检查 cmake 传递给编译器或链接器的确切标志,您可以随时从构建目录运行以下命令:

make VERBOSE=1