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_CXX11
与protobuf::libprotobuf-lite
目标“绑定”在一起,这样我将在使用时和仅在使用时获得它。
target_compile_definitions
在这里不起作用,因为它不接受导入的目标,而由FindProtobuf.cmake
创建的目标是导入的目标。而且无论如何,这似乎是不正确的事情。
我目前唯一的想法(尽管尚未经过测试)是创建另一个自定义目标,该目标仅将PUBLIC
与protobuf::libprotobuf-lite
链接,并添加LANG_CXX11
定义({ {1}})。然后,我将使用此自定义目标而不是PUBLIC
。但这也不好。
如何使用CMake正确执行? (如果重要,我使用的是3.8版。)