2014-09-15 8 views
9

Próbuję zmienić flatbuffers library CMakeLists.txt, aby PUBLICZNE niektóre flagi. Wtedy, mam przepisane te linie:target_compile_definitions z kilkoma flagami

oryginalny kod

elseif(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") 
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -Wall -pedantic -Werror -Wextra") 
endif() 

Nowy kod

elseif(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") 
    target_compile_definitions(flatbuffers PUBLIC "-std=c++0x -Wall -pedantic -Werror -Wextra") 
endif() 

Nazwa docelowa jest flatc, a gdy zacznę budować projekt, otrzymuję to:

Scanning dependencies of target flatc 
[ 7%] Building CXX object CMakeFiles/flatc.dir/src/idl_parser.cpp.obj 
<command-line>:0:1: error: macro names must be identifiers 

Czy to źle, że konwersja "zestawu (CMAKE_CXX_FLAGS)" na "target_compile_definitions()" z tymi flagami?

+1

Powiedz deweloperów flatbuffers nie wysyłać moduł find. To umieszcza mapę ze skarbem. Zamiast tego wyślij plik konfiguracyjny. http://www.cmake.org/cmake/help/v3.0/manual/cmake-packages.7.html – steveire

Odpowiedz

13

Różnica polega na tym, że stara zmienna CMAKE_CXX_FLAGS jest pojedynczym ciągiem z oddzielonymi spacjami i wszystkimi problemami (ucieczką, manipulacją itp.), Które to przynosi.

Nowsze właściwości (takie jak te ustawione przez target_compile_definitions()) działają na listach CMake, jedna opcja na element listy. Po prostu usuń cytaty i gotowe. A ponieważ nie jesteś rzeczywiście przechodzącej definicje (makra), ale opcje, zamiast używać target_compile_options():

elseif(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") 
    target_compile_options(flatbuffers PUBLIC -std=c++0x -Wall -pedantic -Werror -Wextra) 
endif() 
+0

Działa! ;) Wielkie dzięki! – fenix688

Powiązane problemy