7

このダミーの例を試しました:

CMakeLists.txt

cmake_minimum_required( VERSION 2.8 )
project( testcmake )

add_custom_command(
  OUTPUT testcmake.h
  COMMAND xxd -i testcmake.txt testcmake.h
  DEPENDS testcmake.txt
)

add_executable( testcmake testcmake.c testcmake.h )

testcmake.c

#include <stdio.h>
#include "testcmake.h"

int main()
{
    int i;

    for ( i = 0 ; i < testcmake_txt_len ; i++ )
    {
        fputc( testcmake_txt[ i ] , stdout );
    }
}

testcmake.txt

foo
bar
baz

問題

次のエラーで失敗します。

[...]
xxd: testcmake.txt: No such file or directory
[...]

追加WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}するとすべてが正常に機能しますが、カスタム コマンドの出力をソース ディレクトリに表示したくありません。非カスタム ルールと同様に、すべての中間ファイルを CMake ビルド ディレクトリに残しておきます。

4

2 に答える 2

6

xxdを実行する前に、testcmake.txtをビルドフォルダーにコピーする必要があります。また、ビルドディレクトリをインクルードに追加して、次のように機能させる必要があります#include "testcmake.h"

add_custom_command(
  OUTPUT testcmake.h
  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/testcmake.txt testcmake.txt
  COMMAND xxd -i testcmake.txt testcmake.h
  DEPENDS testcmake.txt
)

include_directories(${CMAKE_CURRENT_BINARY_DIR})
于 2012-07-21T13:53:21.753 に答える