我在一个需要使用MySQL库的项目中工作。我在过去取得了成功,使用了一个简单的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的例子。有人能帮我解决这个问题吗?

最佳答案

最简单的方法可能是找到(例如使用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_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})

09-25 16:07