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を試してみましたが、やっています成功する。
CMakeのドキュメントで私の質問への回答をほとんど見つけることができず、Web検索の出発点としてのみ使用することはほとんどありません。 – Egor