cmake target_compile_definitions和target_link_libraries冲突,可能与

cmake target_compile_definitions and target_link_libraries clash, maybe with Qt lines?

本文关键字:target 冲突 link compile definitions cmake libraries      更新时间:2023-10-16

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

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

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