好吧...我不知道是我傻还是出了什么问题。我正在编写一个简单的 C++ 程序,但它无法编译。
我的 这是我的文件。假设“/”指的是项目根目录:
/CMakeLists.txt
cmake_minimum_required(VERSION 3.12.0)
project(test VERSION 0.1.0)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED True)
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
add_subdirectory(modules)
/modules/CMakeLists.txt
add_subdirectory(directory)
add_executable(main main.c++)
target_link_libraries(main
c
)
/modules/main.c++
#include "h.h++"
using namespace std;
using namespace somebody;
int main (int argc, char** argv)
{
printHello();
return 0;
}
/modules/directory/CMakeLists.txt
add_library(c c.c++)
set_target_properties(c PROPERTIES PUBLIC_HEADER "modules/directory/h.h++;")
target_include_directories(c PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>" "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
/modules/directory/c.c++
#include <iostream>
#include "h.h++"
using namespace std;
using namespace somebody;
void printHello()
{
cout << endl << "hello world" << endl;
}
/modules/directory/h.h++
#ifndef apple
#define apple
namespace somebody
{
void printHello();
}
#endif
我知道我的命名空间名称,文件名有点愚蠢,但这是我整理的一个快速项目来演示错误。当我尝试构建项目时,出现以下错误:
undefined reference to `somebody::printHello()'
using namespace somebody;
行是罪魁祸首。显然编译器将 c.c++ 中的函数定义解释为它自己的函数,而不是头文件中的定义。