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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新手求助cmakelist.txt添加依赖库问题相关的知识,希望对你有一定的参考价值。

参考技术A 这一章将从软件开发者的角度来描述如何实用CMake。也就是说,如果你的目标是用CMake来管理你的生成过程,请阅读这一章。 CMake的输入 COMMAND(args) 这里的 COMMAND 是命令行的名称,args是用空格分割的参数列表。

ACTUAL_3DPARTY_DIR,这个的意思是第三方文件所在目录,你把3rdParty下载下来,然后放在你电脑的任意盘位,比如C:/Programs/OSG/3rdParty。在cmake下ACTUAL_3DPARTY_DIR,把那个路径加上来就行了。我验证了下,是会有ACTUAL_3DPARTY_DIR这一项的,如果没有,是不是你没有下载3rdParty第三方文件啊。或者是你加入的CMakeLists.txt这一项应该是OpenSceneGraph-3.0.0中的CMakeLists.txt,而不是OpenSceneGraph-3.0.0\applications中的CMakeLists.txt,你再试试,如果还不行,再追问,希望最终能帮你解决问题。

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

【中文标题】在 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添加依赖库问题的主要内容,如果未能解决你的问题,请参考以下文章

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

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

CMakeList.txt里添加OpenCV, Eigen, Ceres, G2O库

CMakelist.txt 配置各种库

如何使用 CMake 配置 DBus 依赖项

将CURL作为静态库添加到C ++ CMake项目中