Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.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
C++ cmake:创建一个新的库目标,它由一个预构建的库组成_C++_Boost_Cmake - Fatal编程技术网

C++ cmake:创建一个新的库目标,它由一个预构建的库组成

C++ cmake:创建一个新的库目标,它由一个预构建的库组成,c++,boost,cmake,C++,Boost,Cmake,我正在尝试在cmake中创建一个自定义目标,其中: 链接供应商提供的存档 添加target\u compile\u选项(…PUBLIC…) 添加target\u include\u目录(…PUBLIC…) 通过这种方式,消费者可以链接到我的新目标,并设置必要的include目录和编译选项 在boost build中,您可以使用该功能“包装”或“别名”预构建库,并添加额外的“使用要求”(编译器标志等),这些将添加到使用库的所有目标中 lib foo : : <file>vend

我正在尝试在cmake中创建一个自定义目标,其中:

  • 链接供应商提供的存档
  • 添加
    target\u compile\u选项(…PUBLIC…)
  • 添加
    target\u include\u目录(…PUBLIC…)
通过这种方式,消费者可以链接到我的新目标,并设置必要的include目录和编译选项

在boost build中,您可以使用该功能“包装”或“别名”预构建库,并添加额外的“使用要求”(编译器标志等),这些将添加到使用库的所有目标中

lib foo 
: 
: <file>vendor/library.a
:
: <include>vendor
;
但是,如果有多个目标需要使用
foo
,那么每个目标都需要重复这3个调用,这将变得非常繁重

对于
foo
的消费者来说,更容易找到其他目标

target_link_libraries     (foo ${CMAKE_CURRENT_LIST_DIR}/vendor/library.a)
target_compile_options    (foo PUBLIC ...)
target_include_directories(foo PUBLIC ...)
问题:

  • 我是否可以创建一个新的库目标,该目标由一个预构建的库组成,该库允许我执行我所描述的操作
编辑以回应评论:

我已尝试创建导入的
库(如上所述):

但是,当我尝试设置include目录时,出现了一个错误:

target_include_directories(foo SYSTEM PUBLIC "${CMAKE_CURRENT_LIST_DIR}/vendor")
错误:

  • 您需要导入预构建的库。这是如何做的教程
  • 要使结果目标“完成”,您需要向其添加某些属性。不幸的是,这不能用通常的技术来完成,因为。因此,您必须手动设置这些道具,如中所述

  • 我想您需要导入一个预构建的库,就像@user3159253导入一样谢谢!尽管如何将
    target\u include\u目录(foo PUBLIC…
    添加到我的
    IMPORTED target
    ?我收到一个错误,
    无法为导入的目标“foo”指定包含目录。
    请参见:)同时检查此项,以便现在您似乎必须使用
    设置目标属性(…接口包含目录…
    )。看起来很难看,但希望你会喜欢,谢谢!!如果你想把它变成一个答案,我很乐意接受
    add_library(foo STATIC IMPORTED)
    set_property(TARGET foo PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_LIST_DIR}/vendor/library.a)
    
    target_include_directories(foo SYSTEM PUBLIC "${CMAKE_CURRENT_LIST_DIR}/vendor")
    
    CMake Error at vendor/CMakeLists.txt:39 (target_include_directories):
      Cannot specify include directories for imported target "foo".