Лучший способ помещает случайное значение в новый столбец просто с этой целью и использует что-то вроде этого (pseude код + SQL):
randomNo = random()
execSql("SELECT TOP 1 * FROM MyTable WHERE MyTable.Randomness > $randomNo")
Это - решение, используемое кодом MediaWiki. Конечно, существует некоторая предвзятость против меньших значений, но они нашли, что было достаточно перенести случайное значение для обнуления, когда никакие строки не выбираются.
newid () решение может потребовать полного сканирования таблицы так, чтобы каждой строке можно было присвоить новый гуид, который будет намного менее производителен.
рэнд () решение не может работать вообще (т.е. с MSSQL), потому что функция будет оценена только однажды, и каждый , строке присвоят то же "случайное" число.
Если вы хотите использовать файл набора инструментов, есть более простое решение (IMHO), чем то, что предлагает @auledoom. Вам вообще не нужно писать сценарии оболочки оболочки, просто поместите это в файл цепочки инструментов:
# the name of the target operating system
set(CMAKE_SYSTEM_NAME Linux)
# Which compilers to use for C and C++
set(CMAKE_C_COMPILER gcc -m32)
set(CMAKE_CXX_COMPILER g++ -m32)
Это сделает его «переменной списка» в cmake. Это решение работает для меня. Преимущество файла toolchain заключается в том, что вы также можете определить пути для 32-битных библиотек и т. Д., Которые обычно отличаются от стандартных путей.
Все, что вам нужно, это добавить -m32
к CFLAGS
и CXXFLAGS
при запуске CMake. Это можно сделать с помощью переменных среды:
$ CFLAGS=-m32 CXXFLAGS=-m32 cmake .
или путем установки соответствующих переменных CMake:
$ cmake -DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32 .
Это легко проверить с помощью простого проекта CMake:
$ uname -m
x86_64
$ CFLAGS=-m32 CXXFLAGS=-m32 cmake .
-- The C compiler identification is GNU 4.8.1
-- The CXX compiler identification is GNU 4.8.1
....
$ make
Scanning dependencies of target foo
[100%] Building CXX object CMakeFiles/foo.dir/foo.cc.o
Linking CXX executable foo
[100%] Built target foo
$ file foo
foo: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x5b1871446c92cbdcbf905583e16189f68f3bf5f2, not stripped
где CMakeLists.txt
- тривиальный файл CMake:
project(TEST)
add_executable(foo foo.cc)
и foo.cc
выглядит следующим образом:
int main () {}