c++ - 如何检测 C/C++ 文件正在使用 Windows 特定的东西
问题描述
基本上,我想通过检测特定于 Windows 的包含、程序调用、运行时动态链接的库以及任何与 Linux 不兼容的东西来测试一般不会在 Linux 上运行的文件/库/代码。
这是为了确保生成的程序始终在 Linux 下运行。
我也必须自动化这个
谢谢!
编辑:我说的是源代码,而不是编译的二进制文件,但如果某些代码使用预编译的库,我需要检查它在使用时是否可以在 Linux 上运行
Edit2:我对 C/C++ 测试套件了解不多,但编译和评估每一行,包括所有条件分支应该是可行的,这并检查链接的二进制库是否与已知库列表兼容可以正常工作吗?
解决方案
我认为没有确切的方法可以做到这一点。不过,您可以尝试以下方法:
#!/bin/bash
find . -type f -name "*.cpp" | xargs cat | grep "windows.h"
find . -type f -name "*.h" | xargs cat | grep "windows.h"
find . -type f -name "*.hpp" | xargs cat | grep "windows.h"
find . -type f -name "*.cc" | xargs cat | grep "windows.h"
find . -type f -name "*.cxx" | xargs cat | grep "windows.h"
find . -type f -name "*.cpp" | xargs cat | grep "winsock.h"
...
之后,将当前目录设置为项目的根目录,然后运行脚本。如果输出为空,那就没问题了。
这里的问题是建立一个标题列表,但这可以很容易地用谷歌搜索。
这个解决方案不会让你达到 100%,但是,经过多次迭代,它会非常接近 99.9%。
为了进一步自动化,您可以检查输出是否为空,并根据结果返回 0 或 1。
检查#ifdef _WIN32 之类的所有宏...好吧,您需要为此构建自己的编译器,我不知道这些东西是否存在。
推荐阅读
- mongodb - 如何使用golang在mongodb中批量插入
- python - 带有 tkinter 的 Windows
- flutter - 如何将参数传递给 onInit 方法
- sql - 在 SQL 中的特殊字符之后和之前将所有内容作为单独的列获取
- javascript - Google表格/应用程序脚本:在特定文件夹中创建新电子表格的功能
- discord.js - Discord.js 在 1 个命令中添加/删除角色
- node.js - 打字稿导入别名子模块而不暴露
- angular - 依次执行异步函数,等待每个函数执行完毕
- unity3d - 当我点击 E 并且光线投射没有命中对象时,我收到此错误消息:NullReferenceException:Object reference not set to an instance of an object
- javascript - 如何使用 JS/JQUERY 从数组创建特定表