4

CMake によって生成された Makefile があります。CMake 実行可能ファイルへの次のパスが Makefile に設定されています。

CMAKE_COMMAND = /home/xyz/opt/cmake/cmake-3.1.1/bin/cmake

Fortify sourceanalyzer を統合してスキャンを実行するにはどうすればよいですか?

4

8 に答える 8

7

私は同じ課題を抱えていましたが、次のように実行して解決しました:

  1. sourceanalyzer -b project_ID -clean
  2. ビルドディレクトリに移動し、make clean を実行するか、Makefile を含むすべてのコンテンツを削除します。
  3. CC および CXX 変数を変更して cmake を実行します: CC="sourceanalyzer -b project_ID gcc" CXX="sourceanalyzer -b project_ID g++" cmake ..
  4. make と fortify を実行すると、コンパイラが仕事をしている間にファイルが変換されます。
  5. sourceanalyzer -b project_ID -scan -f results.fpr を実行します。

それが役に立てば幸い。

于 2016-04-13T11:13:07.267 に答える
1

私は、CMake ビルド システムを HP Fortify SCA と統合する任務を負っていましたが、このスレッドに出くわしました。このスレッドでは、いくつかの洞察が得られましたが、HP Fortify に関連する詳細が不足していたため、実装を共有すると思いました。

ソース ディレクトリと同じレベルに fortify_tools ディレクトリを作成しました。fortify_tools 内には、ツールチェーン ファイルと、ツールチェーン ファイルを介して cmake_compilers として設定される fortify_cc、fortify_cxx、および fortify_ar スクリプトがあります。

fortify_cc

#!/bin/bash

sourceanalyzer -b <PROJECT_ID> gcc  $@

fortify_cxx

#!/bin/bash

sourceanalyzer -b <PROJECT_ID> g++ $@

fortify_ar

#!/bin/bash

sourceanalyzer -b <PROJECT_ID> ar $@

注: PROJECT_ID の代わりにプロジェクト名を挿入してください

スクリプトを使用するように cmake を設定するには、ツールチェーン ファイルを使用します。

fortify_linux_toolchain.cmake

INCLUDE (CMakeForceCompiler)

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION 1)

#specify the compilers
SET(CMAKE_C_COMPILER ${CMAKE_SOURCE_DIR}/fortify_tools/fortify_cc)
SET(CMAKE_CXX_COMPILER ${CMAKE_SOURCE_DIR}/fortify_tools/fortify_cxx)
SET(CMAKE_AR_COMPILER ${CMAKE_SOURCE_DIR}/fortify_tools/fortify_ar)

ツールチェーン ファイルを使用してメイクファイルを生成するには

ccmake -DCMAKE_TOOLCHAIN_FILE=../fortify_tools/foritfy_linux_toolchain.cmake ../

Makefile を構成および生成し、プロジェクトをビルドします。

プロジェクトがビルド ディレクトリ内からビルドされたら、Fortify レポートを生成します。

sourceanalyzer -Xmx2400M -debug -verbose -b <PROJECT_ID> -scan -f <PROJECT_ID>.fpr

最後のステップが CMake の外部にあることは理解していますが、ビルド後のアクションとしてスキャン ステップを実行するために cmake_custom_command を作成できると確信しています。

最後に、これは単なる Linux の実装ですが、必要なバッチ ファイルと Windows 固有のツールチェーン ファイルを作成することにより、概念は Windows にうまく拡張されます。

于 2016-05-25T22:01:41.130 に答える