【问题标题】:cmake target_compile_definitions and target_link_libraries clash, maybe with Qt lines?cmake target_compile_definitions 和 target_link_libraries 冲突,可能与 Qt 行发生冲突?
【发布时间】:2015-12-02 17:27:29
【问题描述】:

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

【问题讨论】:

  • 很可能,您已经超出了CPACK_VERSION_MAJOR 变量中的换行符。使用硬编码的V_MAJOR=3 定义尝试您的代码。
  • 是的,我现在也是这么想的。我看到了问题并将其发布在下面。

标签: c++ qt cmake makefile


【解决方案1】:

发现问题:我正在从文件中读取版本号。

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)

等等。 字符串末尾的换行符不是很明显,而是通过 'patch' 版本变量进行的。这将换行符插入到 make 文件中并搞砸了一切。


编辑:添加string(STRIP ${VersionString} VersionString) 修复它。

【讨论】:

    猜你喜欢
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 2012-09-26
    相关资源
    最近更新 更多