cmake target_compile_definitions和target_link_libraries冲突,可能与Qt行?

时间:2015-12-02 17:27:29

标签: c++ qt cmake makefile

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文件中换行符的行号。

1 个答案:

答案 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)修复它。