链接到CMake目标会产生什么影响
What can linking to a CMake target impact?
我今天遇到了一个有趣的问题。我正在尝试编译一个测试可执行文件并将其链接到Boost单元测试框架,我尝试了两种不同的方式。
- 使用
-lboost_unit_test_framework
直接链接到"boost_unit_test_framework"库的经典方法 - 链接到
Boost::unit_test_framework
CMake目标的现代CMake方法
有趣的是,当我直接链接到库时,我的代码会编译并链接良好;然而,当我链接到CMake目标时,我的代码在进入链接阶段之前就无法编译!
我遇到的错误与它突然找不到的头文件有关。这表明链接到Boost::unit_test_framework
在某种程度上扰乱了我的include路径。
我知道链接到CMake目标应该是更现代、更受欢迎的方法,但如果它会产生如此意想不到和无法解释的副作用,那似乎比直接链接到库更糟糕。。。
为什么链接CMake目标会导致找不到头文件?还有哪些其他类型的东西可以链接到CMake目标而不是直接链接到库影响?
在这两种情况下,我都使用target_link_libraries
链接到提升库。例如
target_link_libraries(mytest_exe
testlib
-lboost_unit_test_framework
)
或
target_link_libraries(mytest_exe
testlib
Boost::unit_test_framework
)
链接之前失败的事实意味着CMake中的
target_link_libraries
命令实际上不仅仅是链接。它也在影响汇编。
是的,当您链接到库目标而不是库文件时,确实会添加新的包含目录。这就是为什么这种方法被称为"现代"的原因——一个target_link_libraries
调用可以完成使用库所需的所有事情(在您的情况下为Boost)。
"现代"方法失败的原因可能是"true"Boost标头与您使用的其他标头发生冲突。您可以通过检查错误消息中的包含文件链来检测到这一点。
相关文章:
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 明确定义'static const variable in a struct'对C++ 11 及以上有什么影响吗?
- 在C++中使用异常的可能的错误处理策略是什么,它们的后果和影响是什么
- GSL 的预期 (cond) 对运行时施加的性能影响是什么?
- 传递const引用参数的意义是什么?它会产生重大影响吗
- 链接到CMake目标会产生什么影响
- "insert"对德克的引用有什么影响?
- 如果订购有什么影响..否则如果按概率陈述
- 在括号内包装初始化列表的影响是什么?
- 对象分配对二进制大小的影响是什么
- 更改静态库的"动态 RTL"设置有什么影响?
- 直接索引访问与"high"内存使用量相比的理论影响是什么? "shifted"使用"low"内存使用情况的索引访问?
- 向上转换为基类对象而不是引用有什么不良影响
- "int a(); "在C++有什么影响?
- __attribute__(__packed__))对嵌套结构有什么影响?
- dlopen是否重新加载已加载的依赖项?如果是,会产生什么影响
- 在docker中编译不同内核的代码会受到什么影响?
- 函数的返回类型对c++程序有什么影响?
- 如果在Cygwin中出现段错误,会有什么影响