将 c 库路径从柯南包传递到源文件

Passing a c library path from a conan package to a source file

我正在使用 Conan 打包一个旧的 C 库。

库有一个加载过程,需要您从 .cpp 源文件中提供库的路径。如何从消费源内部访问 conan 打包库的目录?

所以设置如下:

柯南包大致如下:

ole_c/0.0:
    
    |--include
    
       |-- ole_c_api.h
    
    |--bin
    
       |-- libole_c.so

消耗: consumer_main.cpp

然后 consumer_main.cpp 包含 ole_c_api.h 并且必须调用一个将路径传递给 libole_c.so 的函数。

如何将该路径传递给 consumer_main.cpp? 一种可能性是传递编译标志 -DPATH_TO_OLE_C_LIB=,然后可以通过 consumer_main.cpp 中的宏对其进行字符串化。如何从 cmake 内部或 ole_c 包装 conan.py 中访问 libole_c.so 的路径并适当地传递它?

您可以使用 cmake generator expressions 获取目标库的路径。如果你在 TARGETS 模式下使用柯南,那么你可以这样做:

target_compile_definitions(MyApp PRIVATE PATH_TO_OLE_C_LIB=$<TARGET_FILE:CONAN_PKG::ole_c>)

或者,您可以填充 cpp-info.defines in the conan recipe and make use of the package_folder 属性 以获取软件包的安装路径(我不确定这是否有效)。