如何将功能标记(定义)与CMake中的外部库关联?

时间:2019-01-15 11:27:37

标签: cmake protocol-buffers

FindProtobuf.cmake for Google Protocol Buffers创建一组目标,例如protobuf::libprotobuf-lite一个目标。

现在,在我的项目中,我正在protobuf::libprotobuf-lite中使用此target_link_libraries。而且效果很好。

但是,在升级到protobuf v3之后,我注意到生成的文件包含受保护的小块

#if LANG_CXX11

然而,看来LANG_CXX11尚未定义此FindProtobuf.cmake。如果要在protobuf生成的代码中使用C ++ 11功能,似乎必须自己定义它。

很明显,我可以在全局范围内完成它并完成它。但是,我更喜欢以某种方式将LANG_CXX11protobuf::libprotobuf-lite目标“绑定”在一起,这样我将在使用时和仅在使用时获得它。

target_compile_definitions在这里不起作用,因为它不接受导入的目标,而由FindProtobuf.cmake创建的目标是导入的目标。而且无论如何,这似乎是不正确的事情。

我目前唯一的想法(尽管尚未经过测试)是创建另一个自定义目标,该目标仅将PUBLICprotobuf::libprotobuf-lite链接,并添加LANG_CXX11定义({ {1}})。然后,我将使用此自定义目标而不是PUBLIC。但这也不好。

如何使用CMake正确执行? (如果重要,我使用的是3.8版。)

0 个答案:

没有答案