Изменение компилируемого файла средствами CMake

У меня есть C/C++ файл functions.cpp. Как с помощью CMake скомпилировать только определённые функции из этого файла?

То есть вместо:

add_library(my_lib functions.cpp)

Надо что-то вроде:

add_library(my_lib some_functions.cpp)

Возможно, надо скопировать исходный файл и удалить из него ненужные функции? Как это сделать средствами CMake?

Содержимое файла может меняться, список нужных функций тоже, изменять functions.cpp для этих целей я не могу, поэтому необходимо делать это на этапе сборки, а не вручную создавать новый файл some_functions.cpp всякий раз, включая только нужные функции из общего хедера.


Ответы (1 шт):

Автор решения: Egorithm

Это можно сделать с помощью директив препроцессора и cmake-команды add_compile_definitions(). Например, так я писал кроссплатформенные функции для работы с текстом (кодировками):

В CMakeLists.txt:

add_compile_definitions(Linux=1 Windows=2)
if (UNIX)
    add_compile_definitions(OS=Linux)
elseif (WIN32)
    add_compile_definitions(OS=Windows)
endif ()

В коде:

#if OS == Linux
    /* code */
#elif OS == Windows
    /* code */
#endif
→ Ссылка