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
C++ cmake:针对静态导入库的链接失败_C++_Cmake - Fatal编程技术网

C++ cmake:针对静态导入库的链接失败

C++ cmake:针对静态导入库的链接失败,c++,cmake,C++,Cmake,我有一个供应商提供的静态库 我已将其添加为静态导入的库目标,并在目标上设置属性: add_library( lime_api STATIC IMPORTED ) set_target_properties( lime_api PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_LIST_DIR}/trading/limeTradingApi.a" )

我有一个供应商提供的静态库

我已将其添加为
静态导入的
库目标,并在目标上设置属性:

add_library(
    lime_api 
        STATIC 
        IMPORTED
    )

set_target_properties(
    lime_api 
        PROPERTIES 
        IMPORTED_LOCATION "${CMAKE_CURRENT_LIST_DIR}/trading/limeTradingApi.a"
    )

# users include "api/trading/limeTradingApi.h"
set_target_properties(
    lime_api 
        PROPERTIES
        INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_LIST_DIR}/.."
    )
在我的源代码树的其他地方,我尝试链接到
lame\u api
,但我得到一个错误:

我的源代码树如下所示:

src
|
+--- api
|    | 
|    +--- trading
|    |       - limeTradingApi.a
|    |       - limeTradingApi.h
|    |
|    +--- examples
|         |
|         +--- trading
|
+--- order
     |
     +--- example
奇怪的是,有一个供应商提供的示例链接到此库,并且效果很好:

api/examples/trading/CMakeLists.txt

add_executable       (trading_demo exampleClient.cc)
target_link_libraries(trading_demo lime_api)           <-- this works
add_library(
        order
            STATIC
            ${SRCS}
        )
target_link_libraries(order lime_api)                  <-- this doesn't work
add_executable       (order_example main.cpp)
target_link_libraries(order_example order)
order/example/CMakeLists.txt

add_executable       (trading_demo exampleClient.cc)
target_link_libraries(trading_demo lime_api)           <-- this works
add_library(
        order
            STATIC
            ${SRCS}
        )
target_link_libraries(order lime_api)                  <-- this doesn't work
add_executable       (order_example main.cpp)
target_link_libraries(order_example order)
问题:
为什么不将链接的目标
lame\u api
转换为我的可执行文件的
-llimeTradingApi.a
。根据报告:

这就是为什么正确的库路径用于内部
trading\u demo
目标,而不用于外部
order\u示例
目标的原因。要解决此问题,添加
GLOBAL
选项就足够了:

add_library(lime_api STATIC IMPORTED GLOBAL)

啊!我错过了文档中的
GLOBAL
!我希望我能投你更多的票!非常感谢。