Я довольно новичок в разработке linux и испытываю трудности с использованием класса из отдельного файла в моем основном. Ошибка, которую я получаю при создании (после создания makefile с cmake), заключается в том, что система не называет тип, я думаю, что код в системном классе правильный, как если бы я компилировался, не пытаясь создать объект системного класса, у меня нет ошибок, поэтому я думаю, что это может быть связано с тем, как я написал файл CMakeLists.txt.Проблема с Cmake, связанная с классом из отдельного файла C++
Это мой CMakeLists файл:
cmake_minimum_required (VERSION 2.6)
project (GL_PROJECT)
add_library(system system.cpp)
include_directories(${GL_PROJECT_SOURCE_DIR})
link_directories(${GL_PROJECT_BINARY_DIR})
find_package(X11)
if(NOT X11_FOUND)
message(FATAL_ERROR "Failed to find X11")
endif(NOT X11_FOUND)
find_package(OpenGL)
if(NOT OPENGL_FOUND)
message(FATAL_ERROR "Failed to find opengl")
endif(NOT OPENGL_FOUND)
set(CORELIBS ${OPENGL_LIBRARY} ${X11_LIBRARY})
add_executable(mainEx main.cpp system.cpp)
target_link_libraries(mainEx ${CORELIBS} system)
Я имею в исходном каталоге мой main.cpp, system.h (определение класса) и system.cpp (реализация класса)
В основной:
#include"system.h"
system sys;
int main(int argc, char *argv[]) {
while(1)
{
sys.Run();
}
}
X11 и GL включает в себя и т.д., в system.h, я думаю, что код там правильно и не вызывает ошибку (как он строит хорошо, если я не попытаться создать экземпляр класса). Я опустил фактический заголовок и реализацию для краткости в надежде, что это будет очевидная ошибка в файле CMakeList, но при необходимости я могу добавить их тоже?
Любые идеи?
Заранее спасибо.
EDIT: Вот ошибки в терминальных
[[email protected] build]$ make
Scanning dependencies of target system
[ 33%] Building CXX object CMakeFiles/system.dir/system.cpp.o
Linking CXX static library libsystem.a
[ 33%] Built target system
Scanning dependencies of target mainEx
[ 66%] Building CXX object CMakeFiles/mainEx.dir/main.cpp.o
/home/tims/Code/GL_Project/main.cpp:5:1: error: ‘system’ does not name a type
/home/tims/Code/GL_Project/main.cpp: In function ‘int main(int, char**)’:
/home/tims/Code/GL_Project/main.cpp:11:3: error: ‘sys’ was not declared in this scope
make[2]: *** [CMakeFiles/mainEx.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/mainEx.dir/all] Error 2
make: *** [all] Error 2
Edit 2: system.h
#include<stdio.h>
#include<stdlib.h>
#include<X11/X.h>
#include<X11/Xlib.h>
#include <GL/gl.h>
#include <GL/glx.h>
#include <GL/glu.h>
class system {
public:
system(void);
~system(void);
void CreateGLXWindow();
void Run();
//Contains information about X server we will be communicating with
Display *display;
XEvent xEvent;
//Window instance
Window rootWindow;
XVisualInfo *xVisInfo;
XSetWindowAttributes setWindAttrs;
XWindowAttributes xWindAttrs;
//GL
GLXContext context;
Colormap cmap;
Window window;
private:
};
Не могли бы вы предоставить генерируемое сообщение об ошибке? Я думаю, что одна проблема может заключаться в том, что вы упоминаете 'system' в' target_link_libraries'. –
Также вы можете использовать 'find_package ( REQUIRED)'. Это автоматически генерирует сообщение об ошибке, если пакет не найден, и вам не нужно 'if (NOT _FOUND) ...'. –
Я отредактировал сформированное сообщение об ошибке в главном сообщении. Я думал, что мне нужно добавить системный класс в качестве библиотеки, а затем связать его с помощью целевых библиотек ссылок? Кроме того - спасибо за отзыв относительно «ТРЕБУЕТСЯ», я сделаю это вместо этого. – timdykes