cmake target_compile_definitions和target_link_libraries冲突,可能与
cmake target_compile_definitions and target_link_libraries clash, maybe with Qt lines?
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)
修复了它。
相关文章:
- 写入位置0x0000000C时发生访问冲突
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 链表中写入访问冲突的未知原因
- C++中的openCV Mat访问冲突
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- CMake "--target install"无需"--build"命令行
- C++尝试深度复制唯一指针时出现内存访问冲突
- 错误:使用通用引用的声明冲突
- 如何解决GTest和LibTorch联动冲突
- 两个运营商的一些奇怪的冲突<<
- 如何在多个线程中创建 QSql数据库连接时防止名称冲突
- C++ 中动态二维数组的访问冲突
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- C++17 十六进制浮点文字单精度后缀冲突?
- 结构字段名称与 GDB 中的 STL 数组冲突
- 写入访问冲突异常
- C++ |匿名命名空间与命名空间 std 冲突