CMake - własny preprocesor uzywając MSVC

0

Hej,
Chcę dodać niestandardowy preprocesor dla plików .cpp używając MSVC i CMakeLists.txt.

Próbowałem nadpisać standardowy kompilator:

set(CMAKE_CXX_COMPILER "${CMAKE_CURRENT_SOURCE_DIR}/compiler.bat")

Który by zrobił co ma do zrobienia a następnie wywołałby standardowy.
Niestety wygląda na to, że ta linijka jest ignorowana/ nadpisywana.

Taki preprocesor mógłby np. tworzyć nowe pliki .cpp i .h

0

add_custom_command (plus ewentualnie add_custom_target) nie wystarcza ?

0

No jakoś to działa ale utknąłem w jednym punkcie.
Zrobiłem customowe polecenie, które będzie skanować wszystkie pliki .cpp i .hpp szukając "#file<nazwa_pliku>".- nie do końca finalnie chce żeby tak to działało, jest to na razie taki test.
Zadaniem tego testu jest wygenerowanie wszystkich takich plików i dodaniem ich do projektu w celu zbudowania.

Mam więc taki kod:

add_custom_command(
	TARGET ${PROJECT_NAME}
	PRE_BUILD
  COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/compiler.bat" -a ${ALL_PROJECT_SOURCES}
  COMMENT "Preprocessing - test"
  VERBATIM)

Polecenie jest wywoływane przed wszelkim budowaniem.

Niestety nie do końca wiem jak to zrobić i czy w ogóle tak się da, czyli sytuacja w której nie znam przed wywołaniem komendy stworzonych plików.

Dla testu zrobiłem taki prosty compiler.bat:

@echo off
echo. 2>autogen.cpp

Cały CMakeLists.txt:

CMAKE_MINIMUM_REQUIRED (VERSION 3.3.0)
PROJECT (testcpp)

# Source files
FILE(GLOB_RECURSE __source_SRC RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
	"${CMAKE_CURRENT_SOURCE_DIR}/cpp/*.cpp"
)
SOURCE_GROUP (TREE "${CMAKE_CURRENT_SOURCE_DIR}/cpp/" PREFIX "Source Files" FILES ${__source_SRC})

SET(ALL_PROJECT_SOURCES 
	${__source_SRC}
)

INCLUDE_DIRECTORIES(
	"./cpp"
)

ADD_EXECUTABLE(${PROJECT_NAME} WIN32
	${ALL_PROJECT_SOURCES}
)

IF (WIN32) 
	SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE")
	SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES COMPILE_DEFINITIONS_DEBUG "_CONSOLE")
ENDIF (WIN32)

add_custom_command(
	TARGET ${PROJECT_NAME}
	PRE_BUILD
  COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/compiler.bat" -a ${ALL_PROJECT_SOURCES}
  COMMENT "Preprocessing - test"
  VERBATIM)

1

Nie używaj GLOB-a, w CMake to nie jest dobry pomysł. CMake interpretuje go tylko raz na etapie generowania projektu a nie potem przy budowaniu.

Poczytaj sobie np. tu: https://crascit.com/2017/04/18/generated-sources-in-cmake-builds/

0

Tak ale to jest przy założeniu, że znam pliki jakie mogą być wygenerowane, a co jeśli nie wiem jeszcze jak one będą się nazywać?

0

No to CMake się do Twoich celów chyba nie nadaje...

1 użytkowników online, w tym zalogowanych: 0, gości: 1