Исключить файлы cpp из сборки с помощью cmakeC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Исключить файлы cpp из сборки с помощью cmake

Сообщение Anonymous »

Я использую cmake для своего проекта на C++ для создания решения VS2022 и пытаюсь настроить единую сборку, поэтому каждый файл cpp в папке будет включен в полученное решение, но исключен из сборки, вместо этого файл, который импортирует все файлы cpp, создается на лету и собирается.
Используя некоторый код, найденный в разных источниках, я придумал эту функцию:

Код: Выделить всё

function(BuildFolder target)
# Split files between cpp and others
set(cpp_files "")
set(other_files "")
foreach(file_path ${ARGN})
if(file_path MATCHES "\\.cpp$")
list(APPEND cpp_files ${file_path})
else()
list(APPEND other_files ${file_path})
endif()
endforeach()

# Exclude all cpp from compilation
set_source_files_properties(${cpp_files} PROPERTIES HEADER_FILE_ONLY true)

# Create the unity build file and add an include statement for every cpp
set(unit_build_file ${CMAKE_CURRENT_SOURCE_DIR}/ub_index.cpp)
FILE(WRITE ${unit_build_file} "// Auto generated from Cmake\n")
foreach(source_file ${cpp_files})
FILE(APPEND ${unit_build_file} "#include \n")
endforeach()

target_sources(${target} PRIVATE ${unit_build_file})
target_sources(${target} PRIVATE ${cpp_files})
target_sources(${target} PRIVATE ${other_files})
endfunction()
Этот способ я вызываю в каждой папке, в которой хочу применить сборку Unity:

Код: Выделить всё

BuildFolder(
${main_target}
A.cpp
A.h
B.cpp
B.h
...
)
Новый файл создан правильно, но файлы cpp не исключены из сборки в Visual Studio.
Я также пытался заменить:

Код: Выделить всё

set_source_files_properties(${cpp_files} PROPERTIES HEADER_FILE_ONLY true)
с:

Код: Выделить всё

set_source_files_properties(${cpp_files} PROPERTIES VS_SETTINGS "ExcludedFromBuild=true")
Или даже объединяя их вместе, но результат не меняется, параметр «Исключить из сборки» всегда остается пустым, и эти файлы включаются в сборку.
Как мне добиться такого результата?>

Подробнее здесь: https://stackoverflow.com/questions/798 ... sing-cmake
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»