在CMake中,当我们定义一个库或可执行文件,并希望它依赖于其他库或目标时,我们可以使用target_link_libraries或target_sources等命令来建立这种依赖关系。但除了这些基本命令,CMake还提供了三个关键字:PUBLIC, PRIVATE, 和 INTERFACE,用于更细致地控制这些依赖关系的作用域和可见性。 PUBLIC 当我们将一个目标A链接到另...
最近看了很多项目的代码,代码是用cmake编译的,由于各种库之间链接关系错综复杂,加上PRIVATE,PUBLIC,INTERFACE属性值,我在添加代码的时候总会遇到稀奇古怪的编译的问题,网上看了很多文章,写的都不是很靠谱,正好看到一个b站视频讲的不错,解决了我很多疑惑,我又有了新的疑惑,折腾了一晚上终于把这个搞明白了,分享给大家...
INTERFACE传递 使用上面的CMake配置进行测试,得到结果如下。由于头文件和链接库都设置为INTERFACE,所以add...
1在使用interface声明一个接口时,只可以使用( )修饰符修饰该接口。 A.privateB.protectedC.pnvate protectedD.public 2在使用interface声明一个接口时,只可以使用( )修饰符修饰该接口?A、private B、protected C、private protected D、public 3在使用interface声明一个接口时,只可以使用( )修饰该接口。 A. pr...
对于Java中接口(interface)的修饰符分析如下:A. Private:接口不能使用private修饰,因为接口需要被其他类实现。private访问权限仅限当前类,与接口设计目的冲突。C. Protected:protected允许同包或子类访问,但接口无法通过继承传递实现关系,因此protected修饰符不适用于接口。D. Static:static修饰符不能用于顶层接口(外部接口...
可以猜想,CMake自己维护了一个库之间的依赖关系树,只要是CMake生成的gcc/g++编译命令,都会应用这些依赖关系。但是单纯看libbar.so或者app这些文件,是没有什么PRIVATE,INTERFACE,PUBLIC的依赖关系的。例如,PRIVATE或者PUBLIC生成的libbar.so就是完全一样的,它们的ELF头中都写入了libfoo.so的依赖项,我们完全可以把PRIVATE...
网上关于 target_link_libraries 中的PRIVATE, PUBLIC , INTERFACE 的解释大部分是错的,而且不是一般的错,是胡说。 因为这三个属性在不同的命令中使用时意义不同,有很多是从target_include_libraries中抄来的。 以下的解释主要场景是linux中,windows不存在这种关系,无需考虑。
在CMake中,链接权限决定了库在何时被链接到目标上。主要有三种权限: PRIVATE(私有): 当目标自身需要此链接库时使用。 PUBLIC(公共): 当目标自身或其他目标链接了这个目标时使用。 INTERFACE(接口): 当目标自身不需要此链接库,但其他目标链接了这个目标时使用。
所以选项D也是正确的。 综上所述,不能用来修饰接口的修饰符是C. protected。正确答案为C. protected。 本题要求判断哪个修饰符不能用来修饰接(interface)解答这道题需要了解Java中接口的特性和可用的修饰符,以及对不同修饰符的作用和适用范围进行了解。
在Java中,接口(interface)的访问修饰符只能使用`public`或默认(即不显式指定修饰符,称为包级私有)。题目要求选择显式声明的修饰符,因此:- **A. private**:错误。接口不能声明为`private`,因为`private`意味着只能在当前类内部访问,而接口设计目的需要被其他类实现。- **B. protected**:错误。接口不能用`pro...