2016-01-28 32 views
0

我正在一个项目中使用MySQL LIBRARIES。我在过去取得了成功,使用了一个简单的makefile来编写特定的标志。在cmakelist.txt中添加和链接mysql库

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

最简单的方法可能是找到(例如谷歌)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_optionstarget_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}) 
+0

所以非常感谢你!我只需要适应:target_compile_options(cgm $ {MYSQL_CFLAGS})到SET(CMAKE_C_FLAGS“$ {CMAKE_C_FLAGS} $ {GCC_MYSQL_COMPILE_FLAGS}”)并且它工作完美!你帮了我很多! – core

+0

@ThomasKettenbach:下次,在建议编辑代码或其他重要部分的帖子之前,请向帖子的作者提供您的评论意图。否则,您可能会拒绝您的建议编辑,因为“与作者的意图相冲突”。请注意,对建议编辑的回复并不总是非常熟悉该主题。查看[help/editing](https://stackoverflow.com/help/editing)了解更多关于编辑其他帖子的细节。 – Tsyvarev

+0

@Tsyvarev:谢谢你让我知道,从现在开始我会记住这一点。并感谢您接受我的编辑。我的更改是:在target_compile_operations中将'OUTPUT_STRIP_TRAILING_WHITESPACE'添加到execute_process并将'PUBLIC'范围。我用'mariadb-devel-5.5.56-2.el7'在一个centos 7上测试过。我的问题是:mysql_config工具在最后添加了一个换行符char,它被cmake 3.4.3 –