2017-05-02 15 views
1

WindowsでCMakeを使用したDirectX11プロジェクトがあります。 porjectには、少なくとも3つのサブオブジェクトが含まれています.1つはコア3Dエンジンライブラリ用です。エンジンの上にビルドされたテストまたはサンプルアプリケーションで使用されるすべてのバイナリデータを含む共通のアセットディレクトリです。Visual StudioでHLSLシェーダファイルのコンパイルをCMAKEで行わないでください

./ 
+-- src/ 
| +-- api/ 
|  +-- CmakeLists.txt 
+-- tests/ 
| +-- assets/ 
| | +-- shaders/ 
| | | +-- 1.hlsl 
| | | +-- 2.hlsl 
| | |  ... 
| | +-- images/ 
| | |  ... 
| | +-- models/ 
| | |  ... 
| | +-- CmakeLists.txt 
| +-- sampleApp1/ 
| | +-- CmakeLists.txt 
| |  ... 
| +-- sampleApp2 
| | +-- CmakeLists.txt 
| | +-- ... 
| | ... 
| +-- CmakeLists.txt 
+-- CmakeLists.txt 

アセットファイルは、ちょうど彼らの作業ディレクトリ(../assets)に比べて、それらを利用できるようにテストプロジェクトバイナリDIR(01​​)に相対してコピーされます。

私もhlslシェーダファイルをアセットに持っています。このようなファイルがCMakeでプロジェクトに追加されると、VSはそれらをコンパイル可能なソースとして脅かすでしょう - 明らかに私が避けたいのは、このファイルをIDEで編集してバイナリフォルダにコピーし、エンジンをコンパイルするのではなく、VSに実行させます。

ビルドを避けたい別のソースファイルのようにヘッダファイルとして設定しようとしましたが、何かがシェーダファイルとして設定して何らかの理由でこれを上書きしているようです。私は、次のしている資産folerで

cmake_minimum_required (VERSION 2.6) 
project (Project) 
subdirs(assets) 

:ここ

は私がしようとしてる私の設定です

file(GLOB_RECURSE FILES *.*) 

add_custom_target(assets SOURCES ${FILES}) 
set_target_properties(assets PROPERTIES FOLDER tests) 

# copy static sources 
foreach(_source IN ITEMS ${FILES}) 

    # this does not work for some reason 
    set_source_files_properties(${_source} PROPERTIES HEADER_FILE_ONLY TRUE) 

    if (IS_ABSOLUTE "${_source}") 
     file(RELATIVE_PATH _source_rel "${CMAKE_CURRENT_SOURCE_DIR}" "${_source}") 
    else() 
     set(source_rel "${_source}") 
    endif() 

    get_filename_component(_source_path "${_source_rel}" PATH) 
    get_filename_component(_source_name "${_source_rel}" NAME)  
    set(dst_path "${CMAKE_CURRENT_BINARY_DIR}/${_source_path}") 

    file(MAKE_DIRECTORY ${dst_path}) 

    # -- win32 only 
    if (WIN32) 
     string(REPLACE "/" "\\" _source "${_source}") 
     string(REPLACE "/" "\\" _dest "${dst_path}/${_source_name}") 
    else() 
     message("win32 required") 
    endif(WIN32) 

    add_custom_command(
     TARGET assets 
     COMMAND copy ${_source} ${_dest} 
     DEPENDS ${_source} 
    ) 

endforeach() 

私は「this answerで、次の方法のdesciberdを試してみましたが、やっています成功する。

答えて

1

In CMake HLSLはソースとして余分に扱われ、HEADER_FILE_ONLYはここでは発見されていません。

あなたはVS_TOOL_OVERRIDEを使用して、このデフォルトの動作をオーバーライドすることができます

set_source_files_properties(my_shader.hlsl PROPERTIES VS_TOOL_OVERRIDE "None") 

はcmakeのソースコードでcmVisualStudio10TargetGenerator::WriteExtraSourceを参照してください。

+0

CMakeのドキュメントで私の質問への回答をほとんど見つけることができず、Web検索の出発点としてのみ使用することはほとんどありません。 – Egor

関連する問題