Linux Mint 17.2 / clang 3.4 / CMake 3.2.2
我试图简化我需要的一些虚拟程序的问题,但这没有奏效。 (即问题不会在那里重现),但这是要点:
我有一个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,添加编译定义),但它不会产生相同的换行错误。
此外,当我进入并手动编辑flags.make时,它将编译;但我知道真的不是如何使用该系统。
有什么想法吗?
编辑:为了清楚起见,当我尝试编译时,我收到一个错误:
... / flags.make:8:***缺少分隔符。停止。
其中8是flags.make文件中换行符的行号。
答案 0 :(得分: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)
修复它。