2015-12-02 2 views
0

Linux Mint 17.2/clang 3.4/CMake 3.2.2cmake target_compile_definitions и target_link_libraries сталкиваются, может быть, с Qt-строками?

Я попытался упростить проблему, связанную с какой-либо фиктивной программой, но это не сработало. (Т.е. проблема не воспроизводится там), но вот суть:

У меня есть файл, который имеет CMakeLists.txt линии к эффекту:

add_executable(${PROJECT_NAME} main.cpp) 
target_link_libraries(${PROJECT_NAME) projectLib1 Qt5::Core Qt5::Widgets) 
target_compile_definitions(${PROJECT_NAME) PUBLIC V_MAJOR=${CPACK_VERSION_MAJOR}) 

и так далее.

Когда я бегу CMake, он генерирует flags.make файл:

CXX_DEFINES = -DV_MAJOR=3

-DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB

где есть разрыв строки между определениями компилировать и определений, порожденных ссылки на Qt.

Я попытался в меньшей программе воспроизвести это (ссылка на Qt, добавление определений компиляции), но она не генерирует ту же ошибку прерывания строки.

Кроме того, когда я вхожу и вручную редактирую флажок.make, он будет скомпилирован; но я знаю, что это действительно не так, как использовать систему.

Любые мысли?


Edit: Просто для ясности, когда я пытаюсь скомпилировать, я получаю сообщение об ошибке:

.../flags.make:8: *** missing separator. Stop.

где 8 является номер строки разрыва строки в этом файле flags.make.

+1

Возможно, вы превысили разрыв строки в переменной 'CPACK_VERSION_MAJOR'. Попробуйте свой код с жестко запрограммированным определением 'V_MAJOR = 3'. – Tsyvarev

+0

Да, я тоже подумал об этом. Я вижу проблему и размещаю ее ниже. – shavera

ответ

2

Обнаружена проблема: Я читал номер версии из файла.

CMakeLists.txt:

file(READ Version.txt VersionString) 
string(REPLACE "." ";" VersionList ${VersionString}) 
list(LENGTH VersionList listLen) 
list(GET VersionList 0 CPACK_PACKAGE_VERSION_MAJOR) 
list(GET VersionList 1 CPACK_PACKAGE_VERSION_MINOR) 
list(GET VersionList 2 CPACK_PACKAGE_VERSION_PATCH) 

и т.д. новой строки в конце строки не сразу видно, но осуществляется через по переменной версии «заплаты». Это вставило новую строку в файл make и все испортило.


Редактировать: добавлено string(STRIP ${VersionString} VersionString) исправлено.