【发布时间】:2023-03-12 15:05:01
【问题描述】:
我正在编写一些代码来测试不应在头文件中定义的变量。但是,没有任何错误。我就是想不通。
请告诉我为什么在运行build.bat 时没有发生错误。变量定义在头文件中,包含在两个源文件中。
CMake项目的结构是:
--build
--include
----module1.h
--script
----build.bat
--src
----Main.cpp
----module1.cpp
----CMakeLists.txt
--CMakeLists.txt
include/module1.h的内容是:
int a = 1;
src/module1.cpp的内容是:
#include "module1.h"
src/Main.cpp的内容是:
#include "module1.h"
根目录下CMakeLists.txt的内容为:
cmake_minimum_required(VERSION 3.0)
PROJECT(ProjectExample VERSION 0.1.0)
SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_CXX_FLAGS "-Wno-deprecated-declarations")
ENABLE_TESTING()
ADD_SUBDIRECTORY(src)
src/CMakeLists.txt的内容是:
SET(INCLUDE ${CMAKE_SOURCE_DIR}/include)
FILE(GLOB SOURCE "*.cpp")
LIST(REMOVE_ITEM SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/Main.cpp)
ADD_COMPILE_OPTIONS("-g")
ADD_COMPILE_OPTIONS("-Wall")
ADD_LIBRARY(hello ${SOURCE})
TARGET_INCLUDE_DIRECTORIES(hello PUBLIC "${INCLUDE}")
ADD_EXECUTABLE(main ${CMAKE_CURRENT_SOURCE_DIR}/Main.cpp)
TARGET_LINK_LIBRARIES(main hello)
script/build.bat的内容是:
@echo off
pushd .
if not exist build (
md build
)
cd build
cmake -G"MinGW Makefiles" ..
mingw32-make.exe
popd
【问题讨论】:
-
未使用的变量。
-
好吧,你没有说错误是什么,但很明显,如果你在头文件中定义一个变量,那么你将面临多个定义错误的风险。答案是在头文件中声明(不定义)变量。你知道区别吗?
-
对不起,我的意思是它应该有多重定义的错误,但它没有。我就是想不通。
-
@fizzbuzz 对不起,我看错了你的问题。 SM 可能是对的
-
@S.M.正如你所说,我在 module1.cpp 中添加了函数 PrintA()。在 Main.cpp 的函数 main() 中,调用了 PrintA()。然后出现错误“a”的多重定义。是不是只有在这种情况下,才会发生外部联动?
标签: c++ variables cmake definition