Макросы среды (SolutionDir) в макросах препроцессора, как?
От: Tujh Голландия  
Дата: 15.12.11 14:04
Оценка:
Как обычно, хочется максимальной переносимости, в частности с домашнего компьютера на рабочий, некоторых исходников. Но при этом часть заголовочных файлов и .lib должны содержаться в папке проекта.
Сделал вот такой "финт ушами":
#define __macro_concat(x,y) x##y
#define __compose_label(x,y) __macro_concat(x,y)

#define __solutiondir__ __compose_label( BASE_DIR, src/libs/dxsdk/lib/d3d8.lib )

#pragma comment(lib, __solutiondir__ )

BASE_DIR объявлен в настройках проекта как
BASE_DIR=$(SolutionDir)
Но в итоге фокус не удался, макрос BASE_DIR раскрывается во что-то типа "c:\projects\fun\ssaver" и \, как не трудно догадаться, считается управляющим символом.
Есть правильный рецепт подобных фокусов, или статья, где почитать?

Заранее благодарю.
Re: Макросы среды (SolutionDir) в макросах препроцессора, ка
От: okman Беларусь https://searchinform.ru/
Дата: 15.12.11 14:29
Оценка: +1
Здравствуйте, Tujh, Вы писали:

T>Как обычно, хочется максимальной переносимости, в частности с домашнего компьютера на рабочий, некоторых исходников. Но при этом часть заголовочных файлов и .lib должны содержаться в папке проекта.

T>Сделал вот такой "финт ушами":
T>
#define __macro_concat(x,y) x##y
T>#define __compose_label(x,y) __macro_concat(x,y)

T>#define __solutiondir__ __compose_label( BASE_DIR, src/libs/dxsdk/lib/d3d8.lib )

T>#pragma comment(lib, __solutiondir__ )

T>BASE_DIR объявлен в настройках проекта как
T>BASE_DIR=$(SolutionDir)
T>Но в итоге фокус не удался, макрос BASE_DIR раскрывается во что-то типа "c:\projects\fun\ssaver" и \, как не трудно догадаться, считается управляющим символом.
T>Есть правильный рецепт подобных фокусов, или статья, где почитать?

В настройках проекта нужно указывать пути к папкам с либами, используя макросы вроде $(SolutionDir).
То есть, к примеру — $(SolutionDir)\lib в "Additional Library Directories" (Linker Options).
А сами либы подключать по относительным и коротким путям — a.lib, b.lib и т.п.
Я другого решения не знаю, это самое переносимое.
Re[2]: Макросы среды (SolutionDir) в макросах препроцессора,
От: Tujh Голландия  
Дата: 16.12.11 05:15
Оценка:
O>В настройках проекта нужно указывать пути к папкам с либами, используя макросы вроде $(SolutionDir).
O>То есть, к примеру — $(SolutionDir)\lib в "Additional Library Directories" (Linker Options).
O>А сами либы подключать по относительным и коротким путям — a.lib, b.lib и т.п.
O>Я другого решения не знаю, это самое переносимое.
Это-то понятно. Основной вопрос именно в том, как можно в исходниках получить переменные проекта по типу SolutionDir и т.п.
Re[3]: Макросы среды (SolutionDir) в макросах препроцессора,
От: cppnick  
Дата: 18.12.11 18:52
Оценка:
Здравствуйте, Tujh, Вы писали:

T>Это-то понятно. Основной вопрос именно в том, как можно в исходниках получить переменные проекта по типу SolutionDir и т.п.

В PreprocessorOptions задать BASEDIR=$(SOlutionDir) не?
Re[4]: Макросы среды (SolutionDir) в макросах препроцессора,
От: Tujh Голландия  
Дата: 19.12.11 07:07
Оценка:
Здравствуйте, cppnick, Вы писали:
C>В PreprocessorOptions задать BASEDIR=$(SOlutionDir) не?
Так я ж написал вроде...задал именно так, только в PreprocessorDefines, но переменная BASEDIR=c:\proj\fun\ вместо BASEDIR=c:\\proj\\fun и, соответственно \p и \f считаются управляющими символами, из-за чего возникают ошибки компиляции.
Если что — MSVC2005
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.