Как #define макросы и побочные продукты в библиотеке C ++ предоставляются клиентскому коду?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как #define макросы и побочные продукты в библиотеке C ++ предоставляются клиентскому коду?

Сообщение Anonymous »

Скажем, у меня есть библиотека C ++, mylib , которая определяет:
#ifdef _MY_COMPILE_ARG
const int libvar = _MY_COMPILE_VAR;
#else
const int libvar = 42;
#endif

и скомпилируется с -d_my_compile_arg = 1 -d_mycompile_var = 1 . Мой вопрос: каково значение mylib :: libvar , как ожидается, будет доступен клиенту, который использует эту библиотеку?1) дается библиотеке при ее построении, mylib :: libvar в клиенте всегда 42 . Почему это так? Как клиент сможет увидеть библиотеку _MY_COMPILE_VAR < /code>?target_compile_definitions(mylib PUBLIC _MY_COMPILE_ARG=1 _MY_COMPILE_VAR=1)
#pragma once

namespace mylib {
#ifdef _MY_COMPILE_ARG
const int libvar = _MY_COMPILE_VAR;
#else
const int libvar = 42;
#endif

void print_libvar() { printf("print from lib: %d\n", libvar); }
int return_libvar() { return libvar; }
}

myclient.cpp скомпилирован с cmake as add_executable (myexec myexec.cpp) и с target_link_libraries (myexec libmylib.a)

#include "mylib.hpp"

int main()
{
printf( "direct read libvar: %d\n", mylib::libvar ); // 42
mylib::print_libvar(); // 42
printf( "returned libvar: %d\n", mylib::return_libvar() ); // 42
return 0;
}

myclient.cpp , скомпилированный с cmake as add_executable (myexec myexec.cpp) и с target_link_libraries (myexec libmylib.a) , но это время с target_compile_definitions (myexec public _my_compile_mpile_.1 _My_compile_var = -1)
#include "mylib.hpp"

int main()
{
printf( "direct read libvar: %d\n", mylib::libvar ); // -1
mylib::print_libvar(); // -1
printf( "returned libvar: %d\n", mylib::return_libvar() ); // -1
return 0;
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... -to-client
Ответить

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

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

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

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

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