jak przekazać flagę kompilacji do kodu jako string?

0

Potrzebuje coś takiego zrobić:

cmake -DNAZWA="saasassasddada" ../

w CMakeList.txt mam:

if(DEFINED NAZWA)
    target_compile_definitions(${PROJECT_NAME} PUBLIC NAZWA=${NAZWA})
else()
    target_compile_definitions(${PROJECT_NAME} PUBLIC NAZWA="0")
endif()

i w kodzie C++ mam porównanie stringa z NAZWA która to chciałbym aby była widoczna jako string.
Problem w tym, że kompilator nie widzi NAZWA jako stringa tylko jako int i wywala error:
'operator==' (operand types are 'std::__cxx11::basic_string<char>' and 'int')
Ktos wie co tu za magiczną sztuczkę zrobić aby kompilator pod flagą kompilacji NAZWA widział stringa?

0

Potrzebujesz "cache entry"

CMakeLists.txt:

set(YOUR_MAGIC_OPTION "0" CACHE STRING "opis co kontroluje ta zmienna")

target_compile_definitions(target PUBLIC NAZWA=${YOUR_MAGIC_OPTION})

Przy czym domyślna wartość to 0 i możesz ją bezpiecznie nadpisać za pomocą cmake -DYOUR_MAGIC_OPTION="2" ...

Offtopic: denerwuje mnie powszechna mania nazywania targetów od ${PROJECT_NAME} :(.

Ktos wie co tu za magiczną sztuczkę zrobić aby kompilator pod flagą kompilacji NAZWA widział stringa?

A gdzie kod C++?
Takie coś powinno zadziałać:

#define STRINGIFY_HELPER(s) #s
#define STRINGIFY(s) STRINGIFY_HELPER(s)

std::string s = STRINGIFY(NAZWA);

https://godbolt.org/z/n5Kz8z3oc

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