首页 > 解决方案 > 如何检测 C/C++ 文件正在使用 Windows 特定的东西

问题描述

基本上,我想通过检测特定于 Windows 的包含、程序调用、运行时动态链接的库以及任何与 Linux 不兼容的东西来测试一般不会在 Linux 上运行的文件/库/代码。
这是为了确保生成的程序始终在 Linux 下运行。
我也必须自动化这个

谢谢!

编辑:我说的是源代码,而不是编译的二进制文件,但如果某些代码使用预编译的库,我需要检查它在使用时是否可以在 Linux 上运行

Edit2:我对 C/C++ 测试套件了解不多,但编译和评估每一行,包括所有条件分支应该是可行的,这并检查链接的二进制库是否与已知库列表兼容可以正常工作吗?

标签: c++ctestingautomated-tests

解决方案


我认为没有确切的方法可以做到这一点。不过,您可以尝试以下方法:

#!/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 之类的所有宏...好吧,您需要为此构建自己的编译器,我不知道这些东西是否存在。


推荐阅读