Как установить GLIBCXX_FORCE_NEW = 1 в cmake только для сборок DEBUG? - PullRequest
2 голосов
/ 11 декабря 2011

Мне нужно установить переменную окружения GLIBCXX_FORCE_NEW = 1 только для сборок DEBUG, в cmake.

В документации по cmake я мог найти только:

  • CMAKE_CXX_COMPILER

  • CMAKE_CXX_FLAGS

  • CMAKE_CXX_FLAGS_DEBUG

  • CMAKE_CXX_FLAGS_RELEASE

  • CMAKE_CXX_FLAGS_RELWITHDEBINFO

Ответы [ 3 ]

5 голосов
/ 11 декабря 2011

Переменная среды GLIBCXX_FORCE_NEW влияет только на поведение скомпилированной программы во время выполнения (см. Документацию gcc ).Добавление его в качестве определения препроцессора во время компиляции программы (например, путем установки CMAKE_CXX_FLAGS) не будет иметь эффекта.

С помощью CMake вы можете установить переменную окружения, которая влияет на время выполнения построенной цели только для Тесты CMake .Следующие команды добавляют тест, действительный для сборок DEBUG, который запускает исполняемый файл с набором переменных GLIBCXX_FORCE_NEW:

add_test(NAME MyTest CONFIGURATIONS Debug COMMAND MyExecutable)
set_tests_properties(MyTest PROPERTIES ENVIRONMENT "GLIBCXX_FORCE_NEW=1")
1 голос
/ 11 декабря 2011

Вы хотите CMAKE_BUILD_TYPE.

Вы можете проверить тип сборки, используя if(CMAKE_BUILD_TYPE STREQUAL "Debug").

Также помните, что STREQUAL чувствителен к регистру, поэтому вы можете string(UPPERCASE ...) указать вашу переменную перед проверкой.

0 голосов
/ 11 декабря 2011

Зачем вам нужна "переменная окружения" для сборки? Если вы хотите установить флаг компилятора или препроцессора только для отладочных сборок, используйте CMAKE_CXX_FLAGS_DEBUG, например,

SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DGLIBCXX_FORCE_NEW=1")

Не тестируйте if(CMAKE_BUILD_TYPE STREQUAL "Debug"), он не будет работать на всех генераторах CMake без Makefile (OSX с Xcode, Windows с Visual Studio)

...