CMAKE_CXX_FLAGS 中的标记“-l”不起作用

Flag '-l' in CMAKE_CXX_FLAGS doesn't work

我在 mac machine 上写了一些代码,它一直运行良好,但是当我将它移植到 Linux machine 时,我得到一个 undefined reference to curl_easy_init

我的编译器标志包括用于链接的 -lcurl

这是我的链接方式:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -L/curl/lib/dir -lcurl")

我试过使用和不使用 -L/curl/lib/dir

Curl 安装在此machine:

$ curl --version
curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP UnixSockets 

从不-l 标记添加到 CMAKE_EXE_LINKER_FLAGS 并且添加到 CMAKE_CXX_FLAGS(标志 -l 用于 linker,不适用于 编译器 ) .

对于 link 和库使用 target_link_libraries:它专门用于此目的:

target_link_libraries(<your-executable> curl)

当您向 *_FLAGS 变量添加一个标志时,该标志被添加 在源文件 (实际上是目标文件)之前 linker 的 command-line.如果源文件使用库中的某些函数,那么 linker 就找不到它。

相反,在linker的命令行中,在源文件之后添加了一个由命令target_link_libraries产生的标志。