Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在cmake from标志中包含外部库_Cmake - Fatal编程技术网

在cmake from标志中包含外部库

在cmake from标志中包含外部库,cmake,Cmake,我正在尝试链接一个外部库,我们称之为foo,它不是用cmake编译的。 foo已安装,我可以通过 foo-config --cflags foo-config --libs 我可以很容易地在Makefile中使用上述内容,但我想切换到cmake。 在mycmakelists.txt中创建名为foo的导入库的正确方法是什么 如果可能的话,我想使用现代的cmake方法(使用目标而不是全局cmake变量) 我尝试了以下方法: execute_process( COMMAND foo-config

我正在尝试链接一个外部库,我们称之为
foo
,它不是用cmake编译的。
foo
已安装,我可以通过

foo-config --cflags
foo-config --libs
我可以很容易地在Makefile中使用上述内容,但我想切换到cmake。 在mycmakelists.txt中创建名为
foo
的导入库的正确方法是什么

如果可能的话,我想使用现代的cmake方法(使用目标而不是全局cmake变量)

我尝试了以下方法:

execute_process(
  COMMAND foo-config --cflags
  RESULT_VARIABLE FOO_EXISTS
  OUTPUT_VARIABLE FOO_FLAGS_RAW
  OUTPUT_STRIP_TRAILING_WHITESPACE)

execute_process(
  COMMAND foo-config --libs
  RESULT_VARIABLE FOO_EXISTS
  OUTPUT_VARIABLE FOO_LIBS_RAW
  OUTPUT_STRIP_TRAILING_WHITESPACE)

if (FOO_EXISTS EQUAL "0")
  separate_arguments(FOO_FLAGS UNIX_COMMAND "${FOO_FLAGS_RAW}")
  separate_arguments(FOO_LIBS UNIX_COMMAND "${FOO_LIBS_RAW}")
endif()

MARK_AS_ADVANCED(
    FOO_FLAGS_RAW
    FOO_LIBS_RAW
    )

add_library(foo SHARED IMPORTED)

target_compile_options(foo PUBLIC ${FOO_FLAGS})
set_target_properties(foo PROPERTIES
    LINK_FLAGS ${FOO_LIBS}
    )
但是,当我将库链接到目标时,似乎没有传递编译标志(当我使用VERBOSE=1时,它们不会显示)。
提前谢谢你

我找到了一个解决方法,我不想自己编写整个find模块。 我刚刚创建了一个pkg配置文件,并使用了已经为此编写的cmake模块。
谢谢@Tsyvarev的建议

“没有成功”告诉我们的不多。出了什么问题?什么有效,什么无效?请具体说明出了什么问题。在帖子中包含相关错误消息和/或任何意外行为。在CMake中,库通过
target\u link\u libraries
命令链接。为此设置LINK_FLAGS属性是错误的。@Tsyvarev我理解,但我得到的只是类似于`-Wl,-rpath,/opt/python/3.7.2/lib-L/home/amlucas/.local/lib/python3.7/site-packages/foo-lfoo-Wl,--rpath-Wl,/home/amlucas/.local/lib/python3.7/site-packages/foo-L/home/amlucas/foo/build/lib-Wl,--rpath-Wl,/home/amlucas/foo/build/lib-L/home/amlucas/foo/build/lib-lgsl-lgslcblas-lm-L/opt/python/3.7.2/lib-lpython3.7m-lpthread-ldl-lutil-lm-Xlinker-export dynamic`您需要解析此输出并提取
-L
选项。查看FindPkgConfig模块如何为
pkg config
output:.@Tsyvarev是的,这正是我所担心的:)好的,非常感谢,我会这样做