在 cmakelist.txt 中添加和链接 mysql 库

Posted

技术标签:

【中文标题】在 cmakelist.txt 中添加和链接 mysql 库【英文标题】:Add and link mysql libraries in a cmakelist.txt 【发布时间】:2016-01-28 17:48:04 【问题描述】:

我正在一个需要使用 mysql LIBRARIES 的项目中工作。过去我取得了成功,我使用了一个简单的 makefile,我在其中编写了特定的标志。

CFLAGS+=`mysql_config --cflags`
LIB+=`mysql_config --libs`

但是……我的项目需要使用 cmakelist,但我遇到了困难。我可以使用以下代码添加 GTK 库:

find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK REQUIRED gtk+-3.0)

include_directories($GTK_INCLUDE_DIRS)
link_directories($GTK_LIBRARY_DIRS)
target_link_libraries( cgm $GTK_LIBRARIES )

但是对于 MySQL,我遇到了麻烦。我尝试了很多事情都没有成功,但我相信这类似于 GTK 示例。谁能帮我解决这个问题?

【问题讨论】:

【参考方案1】:

最简单的方法可能是找到(例如使用 google)FindMySQL.cmake 脚本,这对您有用。该脚本可以像往常一样与find_package 命令一起使用:

list(CMAKE_MODULE_PATH APPEND <directory-where-FindMySQL.cmake-exists>)
find_package(MySQL REQUIRED)

include_directories($MYSQL_INCLUDE_DIR)
target_link_libraries(cgm $MYSQL_LIB)

(变量名称MYSQL_INCLUDE_DIRMYSQL_LIB 对于具体脚本可以不同)。

但是手动链接 MySQL 库并不难,知道计算 CFLAGS 和 LIBS 的方法。

在配置阶段(执行cmake)程序可以用execute_process运行,为特定目标添加CFLAGS和LIBS,分别使用target_compile_options和target_link_libraries:

execute_process(COMMAND mysql_config --cflags
    OUTPUT_VARIABLE MYSQL_CFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND mysql_config --libs
    OUTPUT_VARIABLE MYSQL_LIBS OUTPUT_STRIP_TRAILING_WHITESPACE)

target_compile_options(cgm PUBLIC $MYSQL_CFLAGS)
target_link_libraries(cgm $MYSQL_LIBS)

【讨论】:

非常感谢你!!!我只需要适应: target_compile_options(cgm $MYSQL_CFLAGS) 到 SET( CMAKE_C_FLAGS "$CMAKE_C_FLAGS $GCC_MYSQL_COMPILE_FLAGS" ) 并且效果很好!你帮了我很多! @ThomasKettenbach:下次,在建议对代码或帖子的其他重要部分进行编辑之前,请询问帖子的作者您在 cmets 中的意图。否则,您可能会因为“与作者的意图相冲突”而被拒绝您的建议编辑。请注意,建议编辑的修订者并不总是非常熟悉该主题。有关编辑他人帖子的更多详细信息,请参阅help/editing。 @Tsyvarev:感谢您让我知道,从现在开始我会牢记这一点。并感谢您接受我的编辑。我的更改是:在 target_compile_operations 中将 OUTPUT_STRIP_TRAILING_WHITESPACE 添加到 execute_process 和范围 PUBLIC。我在 centos 7 上使用mariadb-devel-5.5.56-2.el7 进行了测试。我的问题是:mysql_config 工具在末尾添加了一个换行符,cmake 3.4.3 将其报告为错误 @ThomasKettenbach:是的,在建议对代码进行编辑之前,这样的评论会很好。即使您没有得到回复(至少等待一天之后),您也可以尝试在任何地方提出编辑建议:审阅者看到 cmets 并且可能会发现接受编辑的解释非常合理。至于我的答案和其中的代码,OUTPUT_STRIP_TRAILING_WHITESPACE 实际上对于几乎所有程序的输出都是一个有用的选项,并且与许多其他命令不同,target_compile_options 实际上 需要 PUBLIC(或其他)关键字。

以上是关于在 cmakelist.txt 中添加和链接 mysql 库的主要内容,如果未能解决你的问题,请参考以下文章

将外部库添加到 CMakeList.txt c++

ROS初级教程 cmake cmakelist.txt 的编写教程

CMakeList.txt------- 一个cmake实例

rhel7 编写CMakeList.txt编译运行MySQL官方例子代码

新手求助cmakelist.txt添加依赖库问题

71 cmakelist.txt and makefile