- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
FindPkgConfig 中的
pkg_check_modules
给出 MYLIBRARY_LDFLAGS
和 MYLIBRARY_CFLAGS
是普通的 CMake 列表(带分号分隔符)。
set_target_properties
和 set_property
只接受一个字符串。
所以这不起作用,因为它没有扩展列表:
set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY LINK_FLAGS ${MYLIBRARY_LDFLAGS})
这与里面的分号给出了相同的结果:
set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY LINK_FLAGS "${MYLIBRARY_LDFLAGS}")
set_target_properties
在未加引号时扩展为多个字符串,在加引号时扩展为带分号的一个字符串。
我应该如何使用它?
最佳答案
在 CMake 中通过 pkg-config 搜索库的常见工作流程:
# Use pkg-config for search library `xxx`.
pkg_check_modules(XXX xxx)
# Build target which uses given library
# The only command which has no target-oriented equivalent.
# But see comments after the code.
link_directories(${XXX_LIBRARY_DIRS})
# Two global commands belows can be replaced by target-oriented equivalent
# after creation of the target.
include_directories(${XXX_INCLUDE_DIRS})
add_compile_options(${XXX_CFLAGS_OTHER})
# Create target
add_executable(my_exe ...) # Or add_library()
# The only target-oriented command, which has no global equivalent.
target_link_libraries(my_exe ${XXX_LDFLAGS_OTHER}) # It is OK to have link flags here
target_link_libraries(my_exe ${XXX_LIBRARIES}) # Can be combined with previous call.
请注意,我们使用 XXX_LDFLAGS_OTHER
变量而不是 XXX_LDFLAGS
变量。这是因为 XXX_LDFLAGS
包括 -l
和 -L
选项,CMake 有更合适的命令。使用 XXX_CFLAGS_OTHER
的类似原因。
目前CMake不推荐使用link_directories命令但使用库的绝对路径 target_link_libraries称呼。可以使用 find_library 提取 pkg-config 列出的库的绝对路径命令:
...
# Instead of using `link_directories`, collect absolute paths to libraries.
set(XXX_LIBS_ABSOLUTE)
foreach(lib ${XXX_LIBRARIES})
# Choose name of variable, which will contain result of `find_library`
# for specific library.
set(var_name XXX_${lib}_ABS)
# Search library under dirs, returned by pkg-config.
find_library(${var_name} ${lib} ${XXX_LIBRARY_DIR})
list(APPEND XXX_LIBS_ABSOLUTE ${${var_name}})
endforeach()
# Instead of `target_link_libraries(my_exe ${XXX_LIBRARIES})`
target_link_libraries(my_exe ${XXX_LIBS_ABSOLUTE})
关于build - 带有 set_target_properties 的 FindPkgConfig 无法用于设置 CFLAGS/LDFLAGS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35457533/
我创建了一个食谱,总结如下: do_install() { install -d ${D}/GreenTea cp ${S}/foo.sh ${D}/GreenTea cp ${S}/fo
我有一个项目的下一个结构: cruceGame/ src/ libCruceGame/... cruceGameCurses/... multi
我正在尝试使用 go build 来更新我项目中的一个变量: 完整项目路径: c:\goprojects\src\deployment\cl\apps\appName 从 c:\goprojects\
我有一个无法正确链接的 C 项目,我怀疑这是因为 gcc 传递给 ld 程序的 --as-needed 标志。由于该标志,gcc 将在 *.c 文件之前列为选项的任何链接库视为不必要的,并且不会链接它
我正在尝试建立一个名为 PBC 的库(基于配对的密码学)。而这个库需要另一个名为 GMP 的库。 -(GNU 多精度库)。 我的问题是正确安装GMP后,PBC给出了一个错误: gmp library
我正在使用以下标志编译程序并出现错误(运行 64 位操作系统): g++ -lm -lml -lcvaux -lhighgui -lcv -lcxcore main.o BRIEF.o -o BRIE
我在 OS X 10.6.2 上遇到 python-config --ldflags 问题。 使用我的非系统 python.org python 安装: robin-mbp:~ robince$ wh
我想在程序启动时打印构建时间,例如: package main import "fmt" var BuildTime string func main() { fmt.Println(Buil
一个快速的问题。我在示例 Makefile 中找到了“DLDFLAGS”和“LDFLAGS”。使用的编译器是gcc。看起来它们都用于链接器。我想知道它们之间有什么区别。 最佳答案 LDFLAGS通常设
我想在一个存储库中有多个二进制文件,但也想通过 ldflags 设置版本选项。 在存储库中只有一个二进制文件我没有问题,它可以工作,但是对于多个二进制文件的新结构似乎不起作用。 我在 github 上
根据操作系统的不同,我在configure.ac中定义了一个特殊的LDFLAGS: AC_CANONICAL_HOST if test "$host_os" = cygwin then LDF
我是 Linux 操作系统新手。我正在尝试使用 makefile 编译 .c 文件。必须链接数学库。我的 makefile 如下所示: CC=gcc CFLAGS=-Wall -lm all:clie
在 Makefile 中将库与 LDFLAGS 链接时,如何知道库的名称? 例如: libxml2.dylib 与 -lxml2 链接 libz.dylib 实际上命名为 zlib 与 -lz 链接
我有一个使用 GCC 和 MinGW 为 Ubuntu 和 Windows 编译的 Qt 项目。 I got a requirement to harden it by adding the foll
我已经阅读了一些安装,我需要正确设置环境变量LDFLAGS、LD_LIBRARY_PATHS和CXXFLAGS才能运行./compile.sh。但是,我不确定在那里提供什么路径。有人可以解释一下这些标
我想知道 AM_LDFLAGS 和 LDFLAGS 之间的区别,因为我遇到了错误 error: AM_LDFLAGS must be set with '=' before using '+=' 当我
如果我有两个具有相同库名称但存储在不同目录中的库(并且它们可能包含不同的代码)并且我在 makefile 的 LDFLAGS 变量中列出了这两个目录,链接器如何知道先看哪里以及先看哪个要使用的库?
我有一个这样的围棋程序: package main import "fmt" var version string func main() { fmt.Printf("Version %s\n
我正在 Windows 上使用 MSys 和 Mingw 构建一个 dll。项目的源码只提供了autogen.sh、configure.ac和makefile.am。要生成 makefile,运行 a
如何在 qt .pro 字段中添加 LDFLAGS? 考虑库文件夹和共享库(.so)位于 dir_path 文件夹中。 例如,添加这一行并不能解决问题 LIBS+= -Ldir_path -llibr
我是一名优秀的程序员,十分优秀!