Как исправить: CMake-определенный макрос не будет получен компилятором - PullRequest
1 голос
/ 28 мая 2019

решено! = вместо - в CMakeLists.txt в say-hello каталоге

У меня проблемы с определением переменной препроцессора с помощью CMake в соответствии с CMake-Tutorial от vector-of-bool https://www.youtube.com/watch?v=SYgESCQeGJY&list=PLK6MXr8gasrGmIiSuVQXpfFuE1uPT615s&index=8. Очевидно, я использую версию CMake, отличную от той, которую он использует в видео.Но перед изменением своей версии я хочу решить эту проблему здесь.

После успешной настройки через cmake .. я запускаю make и получаю следующее:

[ 25%] Building CXX object say-hello/CMakeFiles/say-hello.dir/src/say-hello/hello.cpp.o
<command-line>:0:14: warning: ISO C++11 requires whitespace after the macro name
/home/maximilian/Dokumente/02_Programmieren/VSCMAKE/say-hello/src/say-hello/hello.cpp: In function ‘void hello::say()’:
<command-line>:0:17: error: expected ‘;’ before numeric constant
/home/maximilian/Dokumente/02_Programmieren/VSCMAKE/say-hello/src/say-hello/hello.cpp:7:43: note: in expansion of macro ‘HELLO_VERSION’
         std::cout << "Hello (Version " << HELLO_VERSION << ")\n";
                                           ^~~~~~~~~~~~~
say-hello/CMakeFiles/say-hello.dir/build.make:62: recipe for target 'say-hello/CMakeFiles/say-hello.dir/src/say-hello/hello.cpp.o' failed
make[2]: *** [say-hello/CMakeFiles/say-hello.dir/src/say-hello/hello.cpp.o] Error 1
CMakeFiles/Makefile2:90: recipe for target 'say-hello/CMakeFiles/say-hello.dir/all' failed
make[1]: *** [say-hello/CMakeFiles/say-hello.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

Я использую:

  • Linux
  • g ++ 8.1
  • C ++ 11
  • CMake 3.14.4
  • Код Visual Studio

Top CMakeLists.txt

cmake_minimum_required(VERSION 3.14.4)
project(MyProject VERSION 1.0.0)
set(CMAKE_CXX_STANDARD 11)

add_subdirectory(say-hello)
add_subdirectory(mainsrc)

CMakeLists.txt в mainsrc

add_executable(main.out main.cpp)

target_link_libraries(main.out PRIVATE say-hello)

main.cpp

#include <iostream>
#include <say-hello/hello.hpp>

int main(){
    hello::say();
    return 0;
}

CMakeLists.txt в скажем-hello

add_library(say-hello
            src/say-hello/hello.cpp
            src/say-hello/hello.hpp
            )

target_include_directories(say-hello PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src")

target_compile_definitions(say-hello PUBLIC HELLO_VERSION-4)

hello.hpp

#ifndef HELLO
#define HELLO

//#define SAYHELLOVERSION 4

namespace hello{
    void say();
}

#endif

hello.cpp

#include <iostream>
#include "hello.hpp"

namespace hello{
    void say(){
        //int version = SAYHELLOVERSION;
        std::cout << "Hello (Version " << HELLO_VERSION << ")\n";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...