C++ cmake生成错误的makefile

C++ cmake生成错误的makefile,c++,makefile,cmake,C++,Makefile,Cmake,如您所见,my shees将分号视为命令的结尾,然后尝试将“-Werror”解释为新命令。如何让cmake生成工作的makefile而不是损坏的makefile 这是我的CMakeLists.txt /usr/bin/clang++ -std=c++11;-Werror;-Wextra;-Wall;-Wconversion -g -o CMakeFiles/TilingGame.dir/src/streak.cc.o -c /home/arne/projects/tilinggame/

如您所见,my shees将分号视为命令的结尾,然后尝试将“-Werror”解释为新命令。如何让cmake生成工作的makefile而不是损坏的makefile

这是我的CMakeLists.txt

/usr/bin/clang++    -std=c++11;-Werror;-Wextra;-Wall;-Wconversion -g   -o CMakeFiles/TilingGame.dir/src/streak.cc.o -c /home/arne/projects/tilinggame/src/streak.cc
clang: error: no input files
/bin/sh: -Werror: Kommando nicht gefunden.
/bin/sh: -Wextra: Kommando nicht gefunden.
/bin/sh: -Wall: Kommando nicht gefunden.
/bin/sh: -Wconversion: Kommando nicht gefunden.
CMakeFiles/TilingGame.dir/build.make:54: recipe for target 'CMakeFiles/TilingGame.dir/src/streak.cc.o' failed

由于您没有向我们显示您的cmake文件中添加这些标志的部分,因此我们无法确切说明。但是,很明显,您正在以某种方式使cmake将值列表转换为字符串,然后将该字符串用作标志。cmake中列表变量的字符串版本以分号分隔

例如,您的
CMakeLists.txt中可能有类似的内容:

project(TilingGame)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(src SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
set(CMAKE_CXX_FLAGS -std=c++11 -Werror -Wextra -Wall -Wconversion)

include(FindPkgConfig)

PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
PKG_SEARCH_MODULE(SDL2IMAGE REQUIRED SDL2_image)
PKG_SEARCH_MODULE(SDL2MIXER REQUIRED SDL2_mixer)
PKG_SEARCH_MODULE(SDL2TTF REQUIRED SDL2_ttf)
PKG_SEARCH_MODULE(ZLIB REQUIRED zlib)

TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${SDL2_LIBRARIES} ${SDL2IMAGE_LIBRARIES} ${SDL2MIXER_LIBRARIES} ${SDL2TTF_LIBRARIES} ${ZLIB_LIBRARIES} tmxparser tinyxml)

您不应该在此处使用引号。

因为您没有向我们显示您的cmake文件中添加这些标记的部分,我们无法确切说明。但是,很明显,您正在以某种方式使cmake将值列表转换为字符串,然后将该字符串用作标志。cmake中列表变量的字符串版本以分号分隔

例如,您的
CMakeLists.txt中可能有类似的内容:

project(TilingGame)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(src SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
set(CMAKE_CXX_FLAGS -std=c++11 -Werror -Wextra -Wall -Wconversion)

include(FindPkgConfig)

PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
PKG_SEARCH_MODULE(SDL2IMAGE REQUIRED SDL2_image)
PKG_SEARCH_MODULE(SDL2MIXER REQUIRED SDL2_mixer)
PKG_SEARCH_MODULE(SDL2TTF REQUIRED SDL2_ttf)
PKG_SEARCH_MODULE(ZLIB REQUIRED zlib)

TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${SDL2_LIBRARIES} ${SDL2IMAGE_LIBRARIES} ${SDL2MIXER_LIBRARIES} ${SDL2TTF_LIBRARIES} ${ZLIB_LIBRARIES} tmxparser tinyxml)

您不应该在此处使用引号。

因为您没有向我们显示您的cmake文件中添加这些标记的部分,我们无法确切说明。但是,很明显,您正在以某种方式使cmake将值列表转换为字符串,然后将该字符串用作标志。cmake中列表变量的字符串版本以分号分隔

例如,您的
CMakeLists.txt中可能有类似的内容:

project(TilingGame)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(src SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
set(CMAKE_CXX_FLAGS -std=c++11 -Werror -Wextra -Wall -Wconversion)

include(FindPkgConfig)

PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
PKG_SEARCH_MODULE(SDL2IMAGE REQUIRED SDL2_image)
PKG_SEARCH_MODULE(SDL2MIXER REQUIRED SDL2_mixer)
PKG_SEARCH_MODULE(SDL2TTF REQUIRED SDL2_ttf)
PKG_SEARCH_MODULE(ZLIB REQUIRED zlib)

TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${SDL2_LIBRARIES} ${SDL2IMAGE_LIBRARIES} ${SDL2MIXER_LIBRARIES} ${SDL2TTF_LIBRARIES} ${ZLIB_LIBRARIES} tmxparser tinyxml)

您不应该在此处使用引号。

因为您没有向我们显示您的cmake文件中添加这些标记的部分,我们无法确切说明。但是,很明显,您正在以某种方式使cmake将值列表转换为字符串,然后将该字符串用作标志。cmake中列表变量的字符串版本以分号分隔

例如,您的
CMakeLists.txt中可能有类似的内容:

project(TilingGame)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(src SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
set(CMAKE_CXX_FLAGS -std=c++11 -Werror -Wextra -Wall -Wconversion)

include(FindPkgConfig)

PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
PKG_SEARCH_MODULE(SDL2IMAGE REQUIRED SDL2_image)
PKG_SEARCH_MODULE(SDL2MIXER REQUIRED SDL2_mixer)
PKG_SEARCH_MODULE(SDL2TTF REQUIRED SDL2_ttf)
PKG_SEARCH_MODULE(ZLIB REQUIRED zlib)

TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${SDL2_LIBRARIES} ${SDL2IMAGE_LIBRARIES} ${SDL2MIXER_LIBRARIES} ${SDL2TTF_LIBRARIES} ${ZLIB_LIBRARIES} tmxparser tinyxml)

您不应该在此处使用引号。

您只能在
CMAKE\u CXX\u标志中添加字符串/附加字符串,但不能在列表中添加字符串

以下方面应起作用:

set(FLAGS -std=c++11 -Werror -Wextra -Wall -Wconversion)
add_definitions("${FLAGS}")

您只能将字符串/附加字符串添加到
CMAKE\u CXX\u标志
,但不能添加列表

以下方面应起作用:

set(FLAGS -std=c++11 -Werror -Wextra -Wall -Wconversion)
add_definitions("${FLAGS}")

您只能将字符串/附加字符串添加到
CMAKE\u CXX\u标志
,但不能添加列表

以下方面应起作用:

set(FLAGS -std=c++11 -Werror -Wextra -Wall -Wconversion)
add_definitions("${FLAGS}")

您只能将字符串/附加字符串添加到
CMAKE\u CXX\u标志
,但不能添加列表

以下方面应起作用:

set(FLAGS -std=c++11 -Werror -Wextra -Wall -Wconversion)
add_definitions("${FLAGS}")

我现在添加了CMakeLists.text。顺便说一句,我还找到了一个至少暂时有效的解决方案:我在所有标志周围使用引号。假设你的意思是将所有标志括在一组引号中,那就是正确的答案。
CMAKE\u CXX\u FLAGS
变量显然应该包含字符串,而不是列表,并由CMAKE引用。我现在添加了CMakeLists.text。顺便说一句,我还找到了一个至少暂时有效的解决方案:我在所有标志周围使用引号。假设你的意思是将所有标志括在一组引号中,那就是正确的答案。
CMAKE\u CXX\u FLAGS
变量显然应该包含字符串,而不是列表,并由CMAKE引用。我现在添加了CMakeLists.text。顺便说一句,我还找到了一个至少暂时有效的解决方案:我在所有标志周围使用引号。假设你的意思是将所有标志括在一组引号中,那就是正确的答案。
CMAKE\u CXX\u FLAGS
变量显然应该包含字符串,而不是列表,并由CMAKE引用。我现在添加了CMakeLists.text。顺便说一句,我还找到了一个至少暂时有效的解决方案:我在所有标志周围使用引号。假设你的意思是将所有标志括在一组引号中,那就是正确的答案。“代码”> CMACHYCXXFLAG 变量显然希望包含一个字符串,而不是一个列表,并由CGuess引用。考虑使用而不是<代码> CMACHYCXXFLAG 。它可以更好地控制标志的范围,并与第三方CMake脚本更好地集成。@ComicSanss我尝试过这个命令。该文档没有示例,我使用它时得到的所有信息如下:使用无效参数调用目标编译选项。有一个简单的例子是
target\u compile\u选项(${PROJECT\u NAME}PUBLIC-std=c++11-Werror-Wextra-Wall-Wconversion)
。请注意,这种方法也不需要引用。请考虑使用而不是<代码> CMACHYCXXFLAG < /代码>。它可以更好地控制标志的范围,并与第三方CMake脚本更好地集成。@ComicSanss我尝试过这个命令。该文档没有示例,我使用它时得到的所有信息如下:使用无效参数调用目标编译选项。有一个简单的例子是
target\u compile\u选项(${PROJECT\u NAME}PUBLIC-std=c++11-Werror-Wextra-Wall-Wconversion)
。请注意,这种方法也不需要引用。请考虑使用而不是<代码> CMACHYCXXFLAG < /代码>。它可以更好地控制标志的范围,并与第三方CMake脚本更好地集成。@ComicSanss我尝试过这个命令。该文档没有示例,我使用它时得到的所有信息如下:使用无效参数调用目标编译选项。有一个简单的例子是
target\u compile\u选项(${PROJECT\u NAME}PUBLIC-std=c++11-Werror-Wextra-Wall-Wconversion)
。请注意,这种方法也不需要引用。请考虑使用而不是<代码> CMACHYCXXFLAG < /代码>。它可以更好地控制标志的范围,并与第三方CMake脚本更好地集成。@ComicSanss我尝试过这个命令。该文档没有示例,我使用它时得到的所有信息如下:使用无效参数调用目标编译选项。有一个简单的例子是
t